149 Stimmen

Was ist in Python der Unterschied zwischen ".append()" und "+= []"?

Was ist der Unterschied zwischen:

some_list1 = []
some_list1.append("something")

y

some_list2 = []
some_list2 += ["something"]

10voto

SRC2 Punkte 101

Der Unterschied besteht darin, dass verketten wird die resultierende Liste reduzieren, während anhängen. bleiben die Ebenen intakt:

So zum Beispiel mit:

myList = [ ]
listA = [1,2,3]
listB = ["a","b","c"]

Wenn Sie append verwenden, erhalten Sie eine Liste von Listen:

>> myList.append(listA)
>> myList.append(listB)
>> myList
[[1,2,3],['a',b','c']]

Wenn Sie stattdessen concatenate verwenden, erhalten Sie eine flache Liste:

>> myList += listA + listB
>> myList
[1,2,3,"a","b","c"]

6voto

Michael Punkte 2767

Die Leistungstests hier sind nicht korrekt:

  1. Sie sollten das Profil nicht nur einmal ausführen.
  2. Wenn der Vergleich append vs. +=[] mehrere Male, sollten Sie erklären append als eine lokale Funktion.
  3. Die Zeitergebnisse sind bei verschiedenen Python-Versionen unterschiedlich: 64- und 32-Bit.

z.B..

timeit.Timer('for i in xrange(100): app(i)', 's = [] ; app = s.append').timeit()

Gute Tests sind hier zu finden: Python Liste anhängen vs. +=[]

4voto

Reinstate Monica Punkte 4424

Das in anderen Antworten erwähnte Rückbindungsverhalten ist unter bestimmten Umständen von Bedeutung:

>>> a = ([],[])
>>> a[0].append(1)
>>> a
([1], [])
>>> a[1] += [1]
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Das liegt daran, dass eine erweiterte Zuweisung immer neu gebunden wird, auch wenn das Objekt an Ort und Stelle geändert wurde. Die Rückbindung ist hier zufällig a[1] = *mutated list* was bei Tupeln nicht funktioniert.

3voto

Chris Upchurch Punkte 14893

Zusätzlich zu den in den anderen Antworten beschriebenen Aspekten haben append und +[] ein sehr unterschiedliches Verhalten, wenn Sie versuchen, eine Liste von Listen zu erstellen.

>>> list1=[[1,2],[3,4]]
>>> list2=[5,6]
>>> list3=list1+list2
>>> list3
[[1, 2], [3, 4], 5, 6]
>>> list1.append(list2)
>>> list1
[[1, 2], [3, 4], [5, 6]]

list1+['5','6'] fügt '5' und '6' als einzelne Elemente zu list1 hinzu. list1.append(['5','6']) fügt die Liste ['5','6'] als ein einzelnes Element zu list1 hinzu.

3voto

Andres Punkte 527

"+" nicht die Liste mutieren

.append() mutiert die alte Liste

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