Форум сайта python.su
6
Доброго времени суток всем!
Подскажите как лаконичнее и красивее сделать условие.
list = ['zasd_1_r','zqwe_2as','z_3q','ss0', 'w1as', 'q2_as', 'cas_3', 'ghh_2', 'dfg3_qa'] for elem in list: if elem.startwith('z') and '1' in elem or '2' in elem or '3' in elem: <-------- некрасивое условие
Отредактировано papuas (Июнь 14, 2017 17:28:29)
Офлайн
11
Попробуй регэкспом что-то вроде такого:
import re if re.search("^z.*[123]", elem) ...
Отредактировано krok64 (Июнь 14, 2017 16:51:32)
Офлайн
6
забыл уточнить
regexp мы любим, знаем, но мне кажется, что его не всегда целесообразно использовать.
выход еще есть в виде фильтрации списка, но хотелось бы узнать про сложные условия.
Отредактировано papuas (Июнь 14, 2017 17:02:20)
Офлайн
186
if not elem == "ss0"
Офлайн
6
Rodegastэто конкретный случай, извиняюсь.
if not elem == “ss0”
Отредактировано papuas (Июнь 14, 2017 17:29:35)
Офлайн
72
if elem.startswith('z') and '1' in elem or any(c in elem for c in '23'):
print elem
if elem.startswith('z') and any(c in elem for c in '123'): print elem
Офлайн
6
PooHPooH спасибо, то что нужно.
хотя сдается мне топикстартер забыл скобки после and в своем примере и все еще проще
Офлайн
857
>>> s = 'zqwe_2as' >>> >>> if set('123').intersection(s): ... 'yes' ... else: ... 'no' ... 'yes' >>>
>>> s = 'zqwe_2as' >>> >>> if set(s) & set('123'): ... 'yes' ... else: ... 'no' ... 'yes' >>>
Отредактировано py.user.next (Июнь 15, 2017 00:09:05)
Офлайн