364 Stimmen

Liste von Nullen in Python

Wie kann ich eine Liste erstellen, die nur Nullen enthält? Ich möchte in der Lage sein, für jedes int in range(10) eine Nullen Liste zu erstellen.

Zum Beispiel, wenn das int im Bereich 4 war, werde ich bekommen:

[0,0,0,0]

und für 7:

[0,0,0,0,0,0,0]

3 Stimmen

Für große numerische Arrays sollten Sie numpy verwenden, das eine zeros-Funktion dafür hat.

1 Stimmen

Listenkomprehension: [0 for i in range(7)] oder eine andere Ganzzahl als 7.

615voto

Tiffany Punkte 5946
#fügen Sie den Code hier ein, um die Anzahl der benötigten Nullen zu ermitteln und benennen Sie die Variable n.
listofzeros = [0] * n

Wenn Sie es vorziehen, es in die Funktion zu setzen, fügen Sie einfach diesen Code ein und fügen Sie return listofzeros hinzu

Was so aussehen würde:

def zerolistmaker(n):
    listofzeros = [0] * n
    return listofzeros

Beispiel Ausgabe:

>>> zerolistmaker(4)
[0, 0, 0, 0]
>>> zerolistmaker(5)
[0, 0, 0, 0, 0]
>>> zerolistmaker(15)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>>

0 Stimmen

Ich nehme an, dass dies eine Zusammenstellung einiger anderer Dinge ist, aber es bringt alles zusammen, und wie es auf der Website heißt, "Wir sind nur hier, um zu helfen" (oder so ähnlich).

29 Stimmen

Bitte übersetzen Sie Folgendes unter Beibehaltung der gleichen HTML-Tags (falls vorhanden) von en nach de: return [0] * n, wie listofzeros ein Füllvariable ist.

8 Stimmen

Achte darauf, wenn du dies mit nicht-primitiven Typen machst. [{ }] * 5 wird eine Liste von 5 Verweisen auf dasselbe Wörterbuch erstellen.

86voto

Seppo Erviälä Punkte 6550
$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.

1 Stimmen

Kannst du etwas genauer erklären, warum dies bei veränderbaren Objekten ein Problem darstellt? Also bei Ganzzahlen, auch wenn sie unveränderlich sind, da sich die Elemente auf dieselbe ID beziehen, werden nicht alle Elemente die gleiche Ganzzahl sein.

2 Stimmen

Sie würden erwarten, dass, wenn Sie eine Liste von Listen erstellen, alle Listen voneinander verschieden sind, während sie tatsächlich Referenzen auf dieselbe Liste sind. Dies spielt bei Ganzzahlen keine Rolle, da Sie die Werte von Ganzzahlen (oder Zeichenfolgen) in Python nicht ändern können. Wenn Sie Operationen wie a = a + 1 durchführen, erhalten Sie eine neue id für a + 1, anstatt den ursprünglichen Wert bei id(a) zu ändern.

2 Stimmen

Der Gotcha hat mich erwischt. Um eine Liste von Nullen zu erstellen (wenn numpy keine Option ist), habe ich folgendes herausgefunden: p_ij = [[0] * k for i in range(k)] Auf diese Weise würde es keine ID teilen und wenn Sie eine Zuweisung wie p_ij[2][3] machen, würde es es nicht allen Zeilen im 3. Element zuweisen.

39voto

Andrew Clark Punkte 193562

Der einfachste Weg, eine Liste zu erstellen, in der alle Werte gleich sind, besteht darin, eine Einzelelementliste mit n zu multiplizieren.

>>> [0] * 4
[0, 0, 0, 0]

Also für deine Schleife:

for i in range(10):
    print [0] * i

17voto

kev Punkte 145226
$ python3
>>> from itertools import repeat
>>> list(repeat(0, 7))
[0, 0, 0, 0, 0, 0, 0]

7voto

Lelouch Lamperouge Punkte 7705

zeros=[0]*4

Sie können in obigem Beispiel 4 durch eine beliebige Zahl ersetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X