Найти - Пользователи
Полная версия: сложный if
Начало » Python для новичков » сложный if
1
papuas
Доброго времени суток всем!
Подскажите как лаконичнее и красивее сделать условие.
 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:   <-------- некрасивое условие
krok64
Попробуй регэкспом что-то вроде такого:
 import re
if re.search("^z.*[123]", elem) ...
papuas
забыл уточнить
regexp мы любим, знаем, но мне кажется, что его не всегда целесообразно использовать.
выход еще есть в виде фильтрации списка, но хотелось бы узнать про сложные условия.
Rodegast
 if not elem == "ss0"
papuas
Rodegast
if not elem == “ss0”
это конкретный случай, извиняюсь.
ладно усложним список.
PooH
  
    if elem.startswith('z') and '1' in elem or any(c in elem for c in '23'):        
        print elem
хотя сдается мне топикстартер забыл скобки после and в своем примере и все еще проще
    if elem.startswith('z') and any(c in elem for c in '123'):        
        print elem
papuas
PooH
хотя сдается мне топикстартер забыл скобки после and в своем примере и все еще проще
PooH спасибо, то что нужно.
py.user.next
  
>>> s = 'zqwe_2as'
>>> 
>>> if set('123').intersection(s):
...     'yes'
... else:
...     'no'
... 
'yes'
>>>

Читаемее, но медленнее
  
>>> s = 'zqwe_2as'
>>> 
>>> if set(s) & set('123'):
...     'yes'
... else:
...     'no'
... 
'yes'
>>>

А в общем случае делай, как PooH предложил, потому что строки могут быть не односимвольными, поэтому пересечение множеств не подойдёт.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB