Я знаю, що це старе питання, але я хотів додати відповідь, яка, на мою думку, є кращою.
Якщо всі елементи, які потрібно перевірити, є хешуючими, ви можете використовувати набір замість списку або кортежу.
>>> None not in {1, 84, 'String', (6, 'Tuple'), 3}
Це набагато швидше, ніж методи в інших відповідях.
>>> import timeit
>>> timeit.timeit("all(v is not None for v in [1, 84, 'String', (6, 'Tuple'), 3])")
1.7880705000000034
>>> timeit.timeit("None not in [1, 84, 'String', (6, 'Tuple'), 3]")
0.35424169999998867
>>> timeit.timeit("None not in (1, 84, 'String', (6, 'Tuple'), 3)")
0.3454340999999772
>>> timeit.timeit("None not in {1, 84, 'String', (6, 'Tuple'), 3}")
0.09577370000002361
Ще однією перевагою цього методу є те, що він дає вам правильну відповідь, навіть якщо хтось визначає __eq__метод класу, який потрібно завжди повертати True. (Звичайно, якщо вони визначають __hash__метод return hash(None), цей метод не буде працювати. Але ніхто не повинен цього робити, оскільки це перешкоджає меті визначення хешу.)
class my_int(int):
def __init__(self, parent):
super().__init__()
def __eq__(self, other):
return True
def __hash__(self):
return hash(super())
print(all(v is not None for v in [1, my_int(6), 2]))
print(None not in [1, my_int(6), 2])
print(None not in (1, my_int(6), 2))
print(None not in {1, my_int(6), 2})