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 appendRückgabe der neuen Liste zulassen ?
Antworten:
Verwenden Sie stattdessen nicht Anhängen, sondern Verketten:
yourList = myList + [40]
Dies gibt eine neue Liste zurück. myListwird nicht betroffen sein. Wenn Sie benötigen , myListbetroffen und entweder verwenden .append()sowieso, dann zuweisen yourListgetrennt von (eine Kopie)myList .
list.appendist 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.appendist 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ückkehrNoneanstelle derselben Liste gewesen? Welches Zen-Prinzip würde es verletzen?