python (, jupyer) :
>>>: %%timeit
...: l = [i for i in range(10000000)]
...: del l[0]
322 ms ± 1.68 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>: %%timeit
...: l = list(range(10000000))
...: del l[0]
195 ms ± 1.42 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>: %%timeit
...: l = [i for i in range(10000000)]
...: del l[-1]
306 ms ± 2.64 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>>: %%timeit
...: l = list(range(10000000))
...: del l[-1]
267 ms ± 2.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>>: %%timeit
...: l = [i for i in range(10000000)]
...: l.append(500)
299 ms ± 3.28 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
...: l = list(range(10000000))
...: l.append(500)
265 ms ± 1.87 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>>: %%timeit
...: l = [i for i in range(10000000)]
...: max(l)
463 ms ± 15.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>: %%timeit
...: l = list(range(10000000))
...: max(l)
335 ms ± 10.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>: from collections import deque
>>>: %%timeit
...: l = deque(range(10000000))
...: max(l)
365 ms ± 1.83 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>: %%timeit
...: l = deque(range(10000000))
...: l.append(500)
283 ms ± 5.19 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>>: %%timeit
...: l = deque(range(10000000))
...: del l[0]
279 ms ± 2.78 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>>: %%timeit
...: l = deque(range(10000000))
...: del l[9999999]
286 ms ± 3.87 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
As you can see, deleting an element by index from deque has O (1) complexity, while deleting from a list by index is a little more expansive, but still pretty constant compared to other O (n) operations, such as maximizing This is consistent with @ 6502's answer. In any case, if you need to use an initializer with a oriented list, the differences are very insignificant, because the time-building procedure prevails over time. Initialization by calling the actual constructor is preferred.
source
share