$python 2.7.8
from timeit import timeit
import numpy
timeit("list(0 for i in xrange(0, 100000))", number=1000)
> 8.173301935195923
timeit("[0 for i in xrange(0, 100000)]", number=1000)
> 4.881675958633423
timeit("[0] * 100000", number=1000)
> 0.6624710559844971
timeit('list(itertools.repeat(0, 100000))', 'import itertools', number=1000)
> 1.0820629596710205
Sie sollten [0] * n
verwenden, um eine Liste mit n
Nullen zu generieren.
Sehen Sie, warum [] schneller ist als list()
Eine Sache müssen Sie beachten, sowohl itertools.repeat
als auch [0] * n
erstellen Listen, deren Elemente auf dieselbe id
verweisen. Dies ist kein Problem bei unveränderlichen Objekten wie Zahlen oder Zeichenfolgen, aber wenn Sie versuchen, eine Liste von veränderbaren Objekten wie einer Liste von Listen zu erstellen ([[]] * n
), verweisen alle Elemente auf dasselbe Objekt.
a = [[]] * 10
a[0].append(1)
a
> [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
[0] * n
erstellt die Liste sofort, während repeat
verwendet werden kann, um die Liste faul zu erstellen, wenn sie zum ersten Mal zugegriffen wird.
Wenn Sie es mit einer wirklich großen Menge von Daten zu tun haben und Ihr Problem keine variable Listenlänge oder verschiedene Datentypen in der Liste erfordert, ist es besser, numpy
-Arrays zu verwenden.
timeit('numpy.zeros(100000, numpy.int)', 'import numpy', number=1000)
> 0.057849884033203125
numpy
-Arrays werden auch weniger Speicher verbrauchen.
3 Stimmen
Für große numerische Arrays sollten Sie
numpy
verwenden, das einezeros
-Funktion dafür hat.1 Stimmen
Listenkomprehension:
[0 for i in range(7)]
oder eine andere Ganzzahl als7
.