Seite 1 von 1

Neuer Liste eine Liste zuordnen und gleichzeitig mit .append() etwas dranhängen

Verfasst: Donnerstag 5. November 2020, 09:07
von Spedex
Hallo, ich hätte eine kurze Frage:
Wenn ich einer neuen Liste eine bestehende Liste zuordne, welcher ich gleichzeitig mit .append() etwas dranhänge, erhalte ich bei der neuen Liste einen Typ "None".
Könnt ihr euch erklären, warum?

Beispielcode:

Code: Alles auswählen

Liste_neu = Liste_alt.append(String)
Die Liste Liste_alt wurde bereits davor definiert, genauso wie der String, der dahinter gehängt wird.

Ich habe da ehrlich gesagt keinen Ansatz.
Wenn man es in zwei Zeilen macht, funktioniert es.

LG
Spedex

Re: Neuer Liste eine Liste zuordnen und gleichzeitig mit .append() etwas dranhängen

Verfasst: Donnerstag 5. November 2020, 09:19
von sparrow
Was denkst du denn, was die Zeile tut?

Sie weist dem Namen 'Liste_neu' (Schlechter Name. Und Variablen werden in Python klein_mit_unterstrich geschrieben) den Rückgabewert der aufgerufenen Methode .append() zu.

Re: Neuer Liste eine Liste zuordnen und gleichzeitig mit .append() etwas dranhängen

Verfasst: Donnerstag 5. November 2020, 09:26
von Sirius3
append ist eine Methode, die eine bestehende Liste verändert. Was sollte da ein sinnvoller Rückgabewert sein? Anders als bei pop, wo klar ist, dass man das Element, das entfernt wurde, haben möchte, soll append das Element zurückliefert, das man gerade angefügt hat? Das hat man ja schon. Oder die Liste? Die hat man ja auch schon. Also besser nichts zurück liefern, dann ist es auch nicht verwirrend.

Re: Neuer Liste eine Liste zuordnen und gleichzeitig mit .append() etwas dranhängen

Verfasst: Donnerstag 5. November 2020, 09:27
von DeaD_EyE
Spedex hat geschrieben: Donnerstag 5. November 2020, 09:07 Wenn ich einer neuen Liste eine bestehende Liste zuordne, welcher ich gleichzeitig mit .append() etwas dranhänge, erhalte ich bei der neuen Liste einen Typ "None".
Das ist richtig so. Die Methode append liefert ein None zurück. Im Gegensatz zu str ist eine Liste mutable, d.h. sie ist veränderlich.
Deswegen hielt man es nicht für notwendig, dass append eine Referenz zu sich selbst zurückliefert.

Bei nicht veränderlichen Objekten wie z.B. einem str, liefern die Methoden einen neuen str zurück.
Unter anderem ist auch deswegen so etwas möglich:

Code: Alles auswählen

"  Hello World   ".strip().lower().replace("world", "Deutschland").title()
Du kannst aber listen verketten.
Die sehr einfache Variante und bei kleinen Listen sehr geeignet:

Code: Alles auswählen

obst = ["Trauben", "Apfel"]
gemüse = ["Grünzeugs"]

beides = obst + gemüse
Oder wenn es sehr lange Listen/Sequenzen sind, mit itertools.chain.

Falls du abwechselnd einer Liste und dann der anderen Liste etwas hinzufügen willst, gibt es auch recht einfache Methoden und das unabhängig davon ob du zwei oder mehrere Listen hast.
Aber schreibt erst mal was du willst.

Re: Neuer Liste eine Liste zuordnen und gleichzeitig mit .append() etwas dranhängen

Verfasst: Donnerstag 5. November 2020, 09:48
von Spedex
Hallo, danke für die Antworten.
Ich will das nicht wirklich machen, es war nur Teil einer Aufgabenstellung zu erläutern, warum man hier "None" erhalten würde.

Also zusammenfassend: .append() ist eine Methode, welche eine bestehende Liste verändert. Die Methode hat somit keinen Rückgabewert. Mit Liste_neu = Liste_alt.append(String) weist man somit einen nicht vorhandenen Rückgabewert zu, somit ist der Typ "None"

Stimmt das?

LG
Spedex

Re: Neuer Liste eine Liste zuordnen und gleichzeitig mit .append() etwas dranhängen

Verfasst: Donnerstag 5. November 2020, 10:45
von narpfel
@Spedex: Die Methode hat (wie alle Funktionen in Python) einen Rückgabewert: `None`. Das ist genauso ein Wert wie `42`, `"foo"` oder `range(27)`.

Es ist übrigens keine feste Regel, dass eine destruktive Methode (also eine Methode, die das Objekt, auf dem sie aufgerufen wird, verändert) `None` zurückgeben muss. Es gibt auch Methoden, die `self` zurückgeben (zum Beispiel, wenn man ein fluent interface baut). In Python ist das aber eher unüblich.

Und du musst zwischen Typ und Wert unterscheiden.

Re: Neuer Liste eine Liste zuordnen und gleichzeitig mit .append() etwas dranhängen

Verfasst: Donnerstag 5. November 2020, 13:54
von __blackjack__
Ergänzend zu narpfel's letztem (Ab)Satz: Der Typ von `None` ist `NoneType`:

Code: Alles auswählen

In [34]: type(None)                                                             
Out[34]: NoneType