Насколько мне известно, оператор 'for' всегда будет занимать время.
Когда длина списка увеличивается, время выполнения также увеличивается.
Я думаю, что при поискеподстрока в строке с оператором 'is' немного быстрее.
In [1]: t = ["abc_%s" % number for number in range(10000)]
In [2]: %timeit any("9999" in string for string in t)
1000 loops, best of 3: 420 µs per loop
In [3]: %timeit "9999" in ",".join(t)
10000 loops, best of 3: 103 µs per loop
Но я согласен, что оператор any
более читабелен.