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?

Toji
quelle
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]
Bernstein
quelle
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 .

Jake
quelle
5

Itertools wiederholen kombiniert mit Listenerweiterung.

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

Sie können dies mit einem Listenverständnis tun

l = [x for i in range(10)];
Mark Elliot
quelle
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)
CTS_AE
quelle
0
l = []
x = 0
l.extend([x]*100)
Rajan saha Raju
quelle