Как проверить на много OR в python

Как возможно записать эту проверку легче? Не печатая на каждый элемент проверки отдельный OR? Может есть какая-то функция?

i = '123'
if '1' in i or '2' in i or '3' in i or '4' in i:
    print(True)
else:
    print(False)

Ответы (5 шт):

Автор решения: strawdog
test = "123"
check = ['1', '2', '3', '4']

print(any(x in test for x in check))

True

→ Ссылка
Автор решения: alex

конечно можно. через set

i = '123'
c = {"1", "2", "3", "4"}
print(bool(set(i) & c))

& - ищет пересечение множеств.

→ Ссылка
Автор решения: Dmitry

Можно поиграться с типом данных set(). То что нам нужно это пересечение множеств. Как это работает?

Кинем переменную i в тип set и присвоим значение для переменной a:

>>> i = '123'
>>> a = set(i)
>>> a
{'1', '3', '2'}

Далее создадим некий шаблон (pattern) по которому и будем определять совпадения. Судя из вашего if'а:

>>> pattern = set("1234")

А теперь глянем пересекаются ли они:

>>> a & pattern
{'1', '3', '2'}

Или проверка с if:

>>> if a & pattern == set():
...   print(False)
... else:
...   print(True) 
→ Ссылка
Автор решения: Andy Pavlov

В качестве экзотики:

print(bool(sum(map(lambda x: x in '123', '1234'))))  # True
print(bool(sum(map(lambda x: x in '567', '1234'))))  # False
→ Ссылка
Автор решения: CrazyElf

Так называемый "функциональный" вариант (без использования циклов даже в таком виде как списковое включение, а одни только вызовы функций):

i = '123'
print(any(map(i.__contains__, '1234')))
→ Ссылка