Когда вы думаете «проверить, если a в b», подумайте о хешах (в данном случае, устанавливает). Самый быстрый способ - хэшировать список, который вы хотите проверить, а затем проверять каждый элемент в нем.
Вот почему Джо Коберг отвечает быстро: проверка пересечения множества очень быстрая.
Когда у вас мало данных, создание наборов может быть пустой тратой времени. Итак, вы можете составить список и просто проверить каждый элемент:
tocheck = [1,2] # items to check
a = [2,3,4] # the list
a = set(a) # convert to set (O(len(a)))
print [i for i in tocheck if i in a] # check items (O(len(tocheck)))
Когда количество предметов, которые вы хотите проверить, мало, разница может быть незначительной. Но сравните множество чисел с большим списком ...
Тесты:
from timeit import timeit
methods = ['''tocheck = [1,2] # items to check
a = [2,3,4] # the list
a = set(a) # convert to set (O(n))
[i for i in tocheck if i in a] # check items (O(m))''',
'''L1 = [2,3,4]
L2 = [1,2]
[i for i in L1 if i in L2]''',
'''S1 = set([2,3,4])
S2 = set([1,2])
S1.intersection(S2)''',
'''a = [1,2]
b = [2,3,4]
any(x in a for x in b)''']
for method in methods:
print timeit(method, number=10000)
print
methods = ['''tocheck = range(200,300) # items to check
a = range(2, 10000) # the list
a = set(a) # convert to set (O(n))
[i for i in tocheck if i in a] # check items (O(m))''',
'''L1 = range(2, 10000)
L2 = range(200,300)
[i for i in L1 if i in L2]''',
'''S1 = set(range(2, 10000))
S2 = set(range(200,300))
S1.intersection(S2)''',
'''a = range(200,300)
b = range(2, 10000)
any(x in a for x in b)''']
for method in methods:
print timeit(method, number=1000)
Скорость:
M1: 0.0170331001282 # make one set
M2: 0.0164539813995 # list comprehension
M3: 0.0286040306091 # set intersection
M4: 0.0305438041687 # any
M1: 0.49850320816 # make one set
M2: 25.2735087872 # list comprehension
M3: 0.466138124466 # set intersection
M4: 0.668627977371 # any
Метод, который является достаточно быстрым, состоит в том, чтобы сделать один набор (из списка), но пересечение работает с большими наборами данных лучше всего!