Как проверить на много 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')))