Извлечение строк из списка при нескольких условиях

#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; .