Есть ли у Python более чистый способ выразить "если x содержит a|b|c / d..."? [дубликат]
этот вопрос уже есть ответ здесь:
- Проверьте, содержит ли элемент списка Python строку внутри другой строки 13 ответов
Питонический способ проверить, если строка x
подстрока y
- это:
if x in y:
найти, если x
эквивалентно a
,b
,c
,d
, e
,f
или g
тоже весть:
if x in [a,b,c,d,e,f,g]:
но если какая-то строка x
содержит a
,b
,c
,d
,e
,f
или g
кажется неуклюжим:
if a in x or b in x or c in x or d in x or e in x or f in x or g in x
есть еще весть метод проверки, если строка x
содержит элемент списка?
я знаю, что это тривиально написать это сам, используя цикл или используя регулярное выражение:
re.search('(dog|cat|bird|mouse|elephant|pig|cow)', x)
но я был интересно, есть ли более чистый способ, который не включает регулярное выражение.
4 ответа:
в подходящие для Python подход будет использовать
any()
:if any(s in x for s in (a,b,c,d,e,f,g)):
из связанной документации:
any
( iterable)возвращает True, если какой-либо элемент iterable - это правда. Если iterable пуст, возвращает False. Эквивалентно:
def any(iterable): for element in iterable: if element: return True return False
кроме того, обратите внимание, что я использовал кортеж вместо списка здесь. Если ваш
a
-g
значения предварительно определенный, тогда кортеж действительно будет предпочтительным. Смотрите:являются ли кортежи более эффективными, чем списки в Python?
if any(q in x for q in [a,b,c,d,e,f,g]):
Я думаю, что короткий и обновления, как вы можете сделать это.