Я использую Any(), чтобы проверить, существует ли определенная строка в коллекции.
Моя интуиция была такой: «Если элемент присутствует, обе версии должны найти его быстро и закоротить».
Однако результаты тестов совершенно неожиданны.
Код:
Код: Выделить всё
import timeit
import sys
# 10 million items
# Putting the "target" right at the front of the list
large_list = ["target"] + [str(i) for i in range(10_000_000)]
large_set = set(large_list)
def test_list():
# This should be instant because "target" is at the start
return any(x == "target" for x in large_list)
def test_set():
# This should also be fast since the item is in the set... right?
return any(x == "target" for x in large_set)
print(f"Python version: {sys.version}")
# Benchmark (100 runs)
print(f"List time: {timeit.timeit(test_list, number=100):.5f}s")
print(f"Set time: {timeit.timeit(test_set, number=100):.5f}s"))
Код: Выделить всё
List time: 0.00006s
Set time: 117.42934s
Мобильная версия