#python #string #list
#питон #строка #Список
Вопрос:
У меня есть следующий список:
fields = ['angDist','angDist','_RAJ2000','_DEJ2000','NVSS','RAJ2000', 'DEJ2000','e_RAJ2000','e_DEJ2000','S1.4','e_S1.4','l_MajAxis', 'MajAxis','l_MinAxis','MinAxis','f_resFlux','_RAJ2000', '_DEJ2000','GLEAM','RAJ2000','DEJ2000','Fpwide','Fintwide', 'eabsFpct','efitFpct','Fp076','Fint076','Fp084','Fint084', 'Fp092','Fint092','Fp099','Fint099','Fp107','Fint107','Fp115', 'Fint115','Fp122','Fint122','Fp130','Fint130','Fp143', 'Fint143','Fp151','Fint151','Fp158','Fint158','Fp166', 'Fint166','Fp174','Fint174','Fp181','Fint181','Fp189', 'Fint189','Fp197','Fint197','Fp204','Fint204','Fp212', 'Fint212','Fp220','Fint220','Fp227','Fint227','alpha', 'Fintfit200','RAdeg','DEdeg','errHalfMaj','errHalfMin', 'errPosAng','objID','mode','q_mode','class','SDSS12', 'm_SDSS12','flags','ObsDate','Q','umag','e_umag','gmag', 'e_gmag','rmag','e_rmag','imag','e_imag','zmag','e_zmag','zsp', 'e_zsp','f_zsp','zph','e_zph','avg_zph','pmRA','e_pmRA','pmDE', 'e_pmDE','SpObjID','spType','spCl','subClass' ]
и мне нужно извлечь список строк , начинающихся с Fp
или заканчивающихся на mag
, но не начинающихся с e_
.
Я пробовал использовать понимание списка:
magnames1 = [mag for mag in fields if mag.startswith('Fp')] magnames2 = [mag for mag in fields if (mag.endswith('mag') amp;amp; !(mag.startswith"e_"))] magnames = magnames1 magnames2
но magnames2
выдает синтаксическую ошибку. Каков самый простой способ сделать это без жесткого кодирования строк в другой список?
Комментарии:
1. Покажите полную обратную трассировку ошибки в виде правильно отформатированного текста в вопросе.
2.
magnames2 = [mag for mag in fields if mag.endswith('mag') and not mag.startswith("e_")]
. (Обратите внимание, что вы можете столкнуться с дублированием в вашем объединенном списке, хотя и не с этим конкретным образцом данных. Вы можете преобразовать в набор, чтобы исключить дубликаты.)3.
amp;amp;
В Python нет s; используйтеand
оператор. Кроме того,!
в Python нет s, используйтеnot
оператор. Каким он должен быть:magnames2 = [mag for mag in fields if (mag.endswith('mag') and not mag.startswith("e_"))]
Ответ №1:
Вы хотите and
вместо amp;amp;
и not
вместо !
:
magnames1 = [mag for mag in fields if mag.startswith('Fp')] magnames2 = [mag for mag in fields if (mag.endswith('mag') and not mag.startswith("e_"))] magnames = magnames1 magnames2
Комментарии:
1. О, я попробовал это, и это не сработало, но у меня была скобка не в том месте. Спасибо.
Ответ №2:
Это должно сработать, если вы используете ключевое not
слово вместо !
и один amp;
вместо amp;amp;
.