Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 14, 2017 16:20:03

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

сложный if

Доброго времени суток всем!
Подскажите как лаконичнее и красивее сделать условие.

 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)

Офлайн

#2 Июнь 14, 2017 16:48:32

krok64
Зарегистрирован: 2017-04-04
Сообщения: 75
Репутация: +  11  -
Профиль   Отправить e-mail  

сложный if

Попробуй регэкспом что-то вроде такого:

 import re
if re.search("^z.*[123]", elem) ...

Отредактировано krok64 (Июнь 14, 2017 16:51:32)

Офлайн

#3 Июнь 14, 2017 16:58:01

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

сложный if

забыл уточнить
regexp мы любим, знаем, но мне кажется, что его не всегда целесообразно использовать.
выход еще есть в виде фильтрации списка, но хотелось бы узнать про сложные условия.

Отредактировано papuas (Июнь 14, 2017 17:02:20)

Офлайн

#4 Июнь 14, 2017 17:14:52

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2842
Репутация: +  186  -
Профиль   Отправить e-mail  

сложный if

 if not elem == "ss0"



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Июнь 14, 2017 17:29:23

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

сложный if

Rodegast
if not elem == “ss0”
это конкретный случай, извиняюсь.
ладно усложним список.

Отредактировано papuas (Июнь 14, 2017 17:29:35)

Офлайн

#6 Июнь 14, 2017 18:29:38

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

сложный if

  
    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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Июнь 14, 2017 18:37:56

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

сложный if

PooH
хотя сдается мне топикстартер забыл скобки после and в своем примере и все еще проще
PooH спасибо, то что нужно.

Офлайн

#8 Июнь 15, 2017 00:05:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10012
Репутация: +  857  -
Профиль   Отправить e-mail  

сложный if

  
>>> 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 предложил, потому что строки могут быть не односимвольными, поэтому пересечение множеств не подойдёт.



Отредактировано py.user.next (Июнь 15, 2017 00:09:05)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version