Was ist der Unterschied zwischen den Listenmethoden append()
y extend()
?
Das Erweitern ist auf meinem Rechner ~4x schneller als das Anhängen in einer Schleife (16us gegenüber 4us für 100 Schleifen mit Nullen)
Was ist der Unterschied zwischen den Listenmethoden append()
y extend()
?
Das Erweitern ist auf meinem Rechner ~4x schneller als das Anhängen in einer Schleife (16us gegenüber 4us für 100 Schleifen mit Nullen)
@MadPhysicist: Der Vollständigkeit halber sei gesagt, dass es Zeiten gibt, in denen extend()
kann nicht vernünftig vorzuteilen, da einige Iterables nicht implementieren __len__()
aber wie Sie wäre ich überrascht, wenn sie es nicht versuchen würde. Ein Teil des Leistungsgewinns kommt auch dadurch zustande, dass der Iterationsteil in reinem C statt in Python ausgeführt wird, wie es in Aaron's Antwort .
Le site append()
Methode fügt ein einzelnes Element an das Ende der Liste an.
x = [1, 2, 3]
x.append([4, 5])
x.append('abc')
print(x)
# gives you
[1, 2, 3, [4, 5], 'abc']
Le site extend()
Methode nimmt ein Argument, eine Liste, und fügt jedes der Elemente des Arguments an die ursprüngliche Liste an. (Listen sind als Klassen implementiert. Das "Erstellen" einer Liste ist in Wirklichkeit die Instanziierung einer Klasse. Als solche hat eine Liste Methoden, die mit ihr arbeiten.)
x = [1, 2, 3]
x.extend([4, 5])
x.extend('abc')
print(x)
# gives you
[1, 2, 3, 4, 5, 'a', 'b', 'c']
から Eintauchen in Python .
Sie können nicht mit nur 6 erweitern, da es nicht iterierbar ist. Und die zweite Ausgabe in Ihrem Beispiel ist falsch. 'abc' wird als einzelnes Element hinzugefügt, da Sie es an extend
als eine Liste mit einem Element ['abc']
: [1, 2, 3, 4, 5, 'abc']. Um die Ausgabe Ihres Beispiels korrekt zu machen, ändern Sie die Zeile abc in: x.extend('abc')
. Und entfernen Sie die x.extend(6)
oder ändern Sie es in x.extend([6])
.
Sie können "+" für die Rückgabe von extend verwenden, anstatt an Ort und Stelle zu extendieren.
l1=range(10)
l1+[11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
l2=range(10,1,-1)
l1+l2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2]
Ähnlich +=
für das Verhalten an Ort und Stelle, jedoch mit leichten Unterschieden zu append
& extend
. Einer der größten Unterschiede zwischen +=
de append
y extend
ist, wenn er in Funktionsbereichen verwendet wird, siehe dieser Blogbeitrag .
append(object)
- Aktualisiert die Liste durch Hinzufügen eines Objekts zur Liste.
x = [20]
# List passed to the append(object) method is treated as a single object.
x.append([21, 22, 23])
# Hence the resultant list length will be 2
print(x)
--> [20, [21, 22, 23]]
extend(list)
- Verkettet im Wesentlichen zwei Listen.
x = [20]
# The parameter passed to extend(list) method is treated as a list.
# Eventually it is two lists being concatenated.
x.extend([21, 22, 23])
# Here the resultant list's length is 4
print(x)
[20, 21, 22, 23]
extend()
kann mit einem Iterator-Argument verwendet werden. Hier ist ein Beispiel. Sie möchten auf diese Weise eine Liste aus einer Liste von Listen erstellen:
Von
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
Sie wollen
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Sie können verwenden itertools.chain.from_iterable()
zu tun. Die Ausgabe dieser Methode ist ein Iterator. Seine Implementierung ist äquivalent zu
def from_iterable(iterables):
# chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
for it in iterables:
for element in it:
yield element
Zurück zu unserem Beispiel, wir können Folgendes tun
import itertools
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
merged = list(itertools.chain.from_iterable(list2d))
und rufen Sie die Fahndungsliste auf.
So sieht die Entsprechung aus extend()
kann mit einem Iterator-Argument verwendet werden:
merged = []
merged.extend(itertools.chain.from_iterable(list2d))
print(merged)
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
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.