@247CodeGirl if you factor in list/set creation time, there is no clear winner:
import timeit
for size in [5, 10, 20, 50, 100, 1000]:
list_time = timeit.timeit(
lambda: (size - 1) in list(range(size)),
number=100000
)
set_time = timeit.timeit(
lambda: (size - 1) in set(range(size)),
number=100000
)
faster = "SET" if set_time < list_time else "LIST"
ratio = max(list_time, set_time) / min(list_time, set_time)
@247CodeGirl print(f"Size {size:3d} | List: {list_time:.5f}s | Set: {set_time:.5f}s | {faster} ({ratio:.2f}x)")
>>>
Size 5 | List: 0.02304s | Set: 0.08299s | LIST (3.60x)
Size 10 | List: 0.09011s | Set: 0.02994s | SET (3.01x)
Size 20 | List: 0.10085s | Set: 0.17090s | LIST (1.69x)
Size 50 | List: 0.22864s | Set: 0.36900s | LIST (1.61x)
Size 100 | List: 0.49618s | Set: 0.42512s | SET (1.17x)
Size 1000 | List: 5.59291s | Set: 12.68279s | LIST (2.27x)
So better don't re-create the data types if possible.