Python: Hänge das Element N-mal an die Liste an


85

Dies scheint etwas zu sein, für das Python eine Abkürzung haben würde. Ich möchte ein Element N-mal an eine Liste anhängen und dabei Folgendes tun:

l = []
x = 0
for i in range(100):
    l.append(x)

Es scheint mir, dass es dafür eine "optimierte" Methode geben sollte, so etwas wie:

l.append_multiple(x, 100)

Gibt es?


8
l.extend([x] * 100)Am Ende ging es mit, da es am besten zu meiner Situation passte. Amber erhält die Antwort als die umfassendste. Vielen Dank!
Toji

4
Stellen Sie sicher, dass Sie die Referenzsemantik von Python verstehen, bevor Sie diese für nicht triviale Zwecke verwenden. Die an l angehängten x sind alle gleich x, daher wirkt sich die Mutation eines von ihnen auf alle aus (alle auf 100 Mal bezogen).
Karl Knechtel

1
Zur Verdeutlichung: Ich verwende es für ganze Zahlen, damit meine Verwendung sicher ist.
Toji

Antworten:


128

Für unveränderliche Datentypen:

l = [0] * 100
# [0, 0, 0, 0, 0, ...]

l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

Für Werte, die als Referenz gespeichert sind und die Sie möglicherweise später ändern möchten (z. B. Unterlisten oder Diktate):

l = [{} for x in range(100)]

(Der Grund, warum die erste Methode nur für konstante Werte wie Ints oder Strings eine gute Idee ist, liegt darin, dass bei Verwendung von nur eine flache Kopie ausgeführt wird <list>*<number> Syntax Wenn Sie also so etwas tun [{}]*100, erhalten Sie 100 Referenzen zum gleichen Wörterbuch - also würde das Ändern eines von ihnen alle ändern. Da Ints und Strings unveränderlich sind, ist dies für sie kein Problem.)

Wenn Sie einer vorhandenen Liste hinzufügen möchten, können Sie die extend()Methode dieser Liste verwenden (in Verbindung mit der Erstellung einer Liste von Dingen, die mithilfe der oben genannten Techniken hinzugefügt werden sollen):

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

1
Oder kombinieren Sie beide Vorschläge in der Form, a.extend(b*n)wo nSie Elemente in b
DarkCygnus

22

Verwenden Sie Erweitern, um am Ende ein Listenverständnis hinzuzufügen.

l.extend([x for i in range(100)])

Weitere Informationen finden Sie in den Python-Dokumenten .


5

Itertools wiederholen kombiniert mit Listenerweiterung.

from itertools import repeat
l = []
l.extend(repeat(x, 100))

3

Sie können dies mit einem Listenverständnis tun

l = [x for i in range(10)];

3

Ich musste einen anderen Weg für einen Auftrag gehen, aber das ist es, was ich am Ende hatte.

my_array += ([x] * repeated_times)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.