Ich möchte so etwas machen:
myList = [10,20,30]
yourList = myList.append (40)
Leider gibt das Anhängen der Liste die geänderte Liste nicht zurück.
Wie kann ich die append
Rückgabe der neuen Liste zulassen ?
Antworten:
Verwenden Sie stattdessen nicht Anhängen, sondern Verketten:
yourList = myList + [40]
Dies gibt eine neue Liste zurück. myList
wird nicht betroffen sein. Wenn Sie benötigen , myList
betroffen und entweder verwenden .append()
sowieso, dann zuweisen yourList
getrennt von (eine Kopie)myList
.
list.append
ist ein Befehl, keine Abfrage.
In Python 3 können Sie eine neue Liste erstellen, indem Sie die alte entpacken und ein neues Element hinzufügen:
a = [1,2,3]
b = [*a,4] # b = [1,2,3,4]
wenn Sie das tun:
myList + [40]
Sie haben tatsächlich 3 Listen.
list.append
ist eingebaut und kann daher nicht geändert werden. Aber wenn Sie bereit sind, etwas anderes als zu verwenden append
, können Sie versuchen +
:
In [106]: myList = [10,20,30]
In [107]: yourList = myList + [40]
In [108]: print myList
[10, 20, 30]
In [109]: print yourList
[10, 20, 30, 40]
Der Nachteil dabei ist natürlich, dass eine neue Liste erstellt wird, die viel länger dauert als append
Hoffe das hilft
Sie können den integrierten Listentyp in Unterklassen unterteilen und die Methode "Anhängen" neu definieren. Oder noch besser, erstellen Sie eine neue, die das tut, was Sie wollen. Unten finden Sie den Code für eine neu definierte Methode zum Anhängen.
#!/usr/bin/env python
class MyList(list):
def append(self, element):
return MyList(self + [element])
def main():
l = MyList()
l1 = l.append(1)
l2 = l1.append(2)
l3 = l2.append(3)
print "Original list: %s, type %s" % (l, l.__class__.__name__)
print "List 1: %s, type %s" % (l1, l1.__class__.__name__)
print "List 2: %s, type %s" % (l2, l2.__class__.__name__)
print "List 3: %s, type %s" % (l3, l3.__class__.__name__)
if __name__ == '__main__':
main()
Hoffentlich hilft das.
Versuchen Sie es mit itertools.chain(myList, [40])
. Dadurch wird ein Generator als Sequenz zurückgegeben, anstatt eine neue Liste zuzuweisen. Im Wesentlichen werden dadurch alle Elemente vom ersten iterierbaren Element bis zur Erschöpfung zurückgegeben und dann zum nächsten iterierbaren Element weitergeleitet, bis alle iterierbaren Elemente erschöpft sind.
Nur um die Antwort von Storstamp zu erweitern
Sie müssen nur myList.append (40) ausführen.
Es wird an die ursprüngliche Liste angehängt. Jetzt können Sie die Variable zurückgeben, die die ursprüngliche Liste enthält.
Wenn Sie mit sehr großen Listen arbeiten, ist dies der richtige Weg.
append()
RückkehrNone
anstelle derselben Liste gewesen? Welches Zen-Prinzip würde es verletzen?