Ваш подход будет работать, однако, будет преобразование в set
.
, что приведет к дополнительным расходам:
all(i in bar for i in foo)
Оба эти решенияимеет временную сложность O(len(foo))
bar = {str(i): i for i in range(100000)}
foo = [str(i) for i in range(1, 10000, 2)]
%timeit all(i in bar for i in foo)
462 µs ± 14.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit set(foo) - set(bar)
14.6 ms ± 174 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# The overhead is all the difference here:
foo = set(foo)
bar = set(bar)
%timeit foo - bar
213 µs ± 1.48 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Служебные данные здесь имеют довольно большое значение, поэтому я бы выбрал all
здесь.