[Python] Iterare in una lista.

Lorenzo Buonanno buonanno.lorenzo a gmail.com
Lun 17 Feb 2020 09:25:39 CET


Ritiro tutto: per liste grosse il costo di calcolare (in python) a ogni
iterazione `(i + base) % len` è molto maggiore del costo di creare una sola
volta all'inizio la nuova lista:

In python3.8:
>>> import timeit
>>> setup = """def function1(lista, base):
...     s = 0
...     for e in lista[base:]+lista[:base]:
...         s += e
...     return s
...
... def function2(lista, base):
...     s = 0
...     l = len(lista)
...     for i in range(l):
...         s += lista[(i + base) % l]
...     return s
...
... lista = list(range(10**6))
... base = 424_242
... """

>>> timeit.timeit("function1(lista, base)", setup=setup, number=500)
33.36239886200008


>>> timeit.timeit("function2(lista, base)", setup=setup, number=500)
66.6768571770001


In pypy3 7.3.0

>>>> timeit.timeit("function1(lista, base)", setup=setup, number=500)
3.723521980999976
>>>> timeit.timeit("function2(lista, base)", setup=setup, number=500)
9.050152363000052
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20200217/ed0ec022/attachment.html>


Maggiori informazioni sulla lista Python