Есть ли у 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]):Я думаю, что короткий и обновления, как вы можете сделать это.