wake-up-neo.net

Erlaube der Methode Python list append, die neue Liste zurückzugeben

Ich möchte so etwas machen:

myList = [10,20,30]
yourList = myList.append (40)

Leider wird beim Listen-Anfügen die geänderte Liste nicht zurückgegeben.

Wie kann ich also append erlauben, die neue Liste zurückzugeben?

37
Wilk

Verwenden Sie nicht Anhängen sondern Verketten:

yourList = myList + [40]

Dies gibt eine new Liste zurück. myList ist nicht betroffen. Wenn myListebenso betroffen sein soll, verwenden Sie .append() trotzdem und weisen yourList getrennt von (einer Kopie von) myList zu.

76
Martijn Pieters

In Python 3 können Sie eine neue Liste erstellen, indem Sie die alte auspacken 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.

7

list.append ist eingebaut und kann daher nicht geändert werden. Wenn Sie jedoch etwas anderes als append verwenden möchten, 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 ist natürlich, dass eine neue Liste erstellt wird, die viel mehr Zeit in Anspruch nimmt als append.

Hoffe das hilft

6
inspectorG4dget

Sie können den integrierten Listentyp unterteilen und die Methode "Anhängen" neu definieren. Oder noch besser: Erstellen Sie eine neue, die das tut, was Sie möchten. Nachfolgend finden Sie den Code für eine neu definierte Anfügemethode.

#!/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 __== '__main__':
  main()

Hoffentlich hilft das.

2

Nur um die Antwort von Storstamp zu erweitern

Sie müssen nur MyList.append (40) tun.

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.

0
ajayinvictus10

Versuchen Sie es mit itertools.chain(myList, [40]). Dadurch wird ein Generator als Sequenz zurückgegeben, anstatt eine neue Liste zuzuweisen. Im Wesentlichen werden alle Elemente vom ersten iterierbaren Element zurückgegeben, bis sie erschöpft sind, und dann zum nächsten iterierbaren Element, bis alle iterierbaren Elemente erschöpft sind.

0
jsears