Seite 1 von 1

Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Dienstag 26. Juni 2018, 21:40
von Atalanttore
Hallo

Ich probiere schon seit Stunden mehrere Rückgabewerte x, y, z einer Funktion, die in einer for-Schleife wieder und wieder aufgerufen wird, zu einer zweidimensionalen Liste hinzuzufügen.

Die Liste sollte in etwa so aussehen:

Code: Alles auswählen

list = [[<x-Wert>, <y-Wert>, <z-Wert>], [<x-Wert>, <y-Wert>, <z-Wert>], [<x-Wert>, <y-Wert>, <z-Wert>], usw.]
Über Google habe ich leider kein passendes Beispiel gefunden, darum frage ich mich langsam, ob das überhaupt so geht?

Gruß
Atalanttore

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Dienstag 26. Juni 2018, 21:49
von sls
Wie sieht denn aus, was du bisher geschrieben hast? Ich kann mir nicht vorstellen was jetzt dein konkretes Problem ist.

Ich stelle mir jetzt sowas vor:

(Python3 im Interpreter)

Code: Alles auswählen

>>> def my_function():
...     return 1, 2, 3
... 
>>> my_list = []
>>> for x in range(3):
...     my_list.append(list(my_function()))
... 
>>> my_list
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Dienstag 26. Juni 2018, 21:56
von __blackjack__
@Atalanttore: Also eine Liste die Listen enthält kann man problemlos erstellen. Eine Funktion kann allerdings nur einen Wert pro Aufruf zurückgeben (``return``). Dieser eine Wert kann aber durchaus auch eine Liste mit Inhalt sein. Letztlich geht es mir da wie sls — ich sehe nicht wo das Problem liegt.

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Dienstag 26. Juni 2018, 22:06
von Atalanttore
Momentan sieht es so aus:

Code: Alles auswählen

list = []
for i in range(0, number_of_points):
    list.append(points(diameter, i*angle, center_x, center_y, center_z))
Zurück bekomme ich eine Liste mit Tupeln:

Code: Alles auswählen

[(1210.0, 540.0, 730.0), usw.]
Gruß
Atalanttore

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Dienstag 26. Juni 2018, 22:15
von sls
Es ist nicht günstig, Python-Keywords (wozu `list` zählt) für eigene Variablenbezeichner zu klauen.

Die Lösung habe ich dir in meinem obigen Beispiel quasi serviert: du musst das Tupel mit list() zu einer Liste umbügeln:

Code: Alles auswählen

your_list.append(list(points(diameter, i*angle, center_x, center_y, center_z)))

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Mittwoch 27. Juni 2018, 06:17
von ThomasL
__blackjack__ hat geschrieben: Dienstag 26. Juni 2018, 21:56 Eine Funktion kann allerdings nur einen Wert pro Aufruf zurückgeben (``return``).
Diese Aussage hast du nicht wirklich so gemeint, oder?

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Mittwoch 27. Juni 2018, 06:42
von kbr
@ThomasL: Die Aussage von __blackjack__ ist korrekt. Eine Funktion gibt stets nur einen Wert zurück.

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Mittwoch 27. Juni 2018, 07:16
von sls
Ich nahm nach dem ersten Post vom TE auch erstmal an, dass er versucht die Rückgabewerte so auszuben:

Code: Alles auswählen

def test():
    return x
    return y
    return z
Von einem Tupel war da ja noch nicht die Rede.

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Mittwoch 27. Juni 2018, 07:52
von __blackjack__
@ThomasL: Doch das war schon so gemeint. Warum sollte es nicht?

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Mittwoch 27. Juni 2018, 13:03
von ThomasL
@kbr @__blackjack__
Wir verlieren uns hier in der Definition von "Wert".
Ich gehe davon aus, ihr meint ein Objekt oder Containerobjekt, z.B. ein Tuple,
welches jedoch mehrere Objekte, die z.B. einen integer Wert repräsentieren können, enthalten kann.

Re: Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Verfasst: Mittwoch 27. Juni 2018, 13:40
von __blackjack__
Na wenn Du das nicht zulassen würdest, könnte man ja nur ”atomare” Objekte zurückgeben, was die Sprache recht unbrauchbar machen würde. Selbst eine Zeichenkette könnte man dann ja nicht zurückgeben. Eine Liste oder ein Tupel sind trotzdem nur *ein* Wert.

Es gibt Sprachen wo das anders ist, da kann man mehrere Werte zurückgeben, aber *muss* die dann beim Aufrufer an verschiedene Namen zuweisen. Und wenn Anfänger immer

Code: Alles auswählen

def f():
    return 1, 'Hallo', None

a, b, c = f()
sehen, vergessen sie eventuell das es auch so geht:

Code: Alles auswählen

xs = f()