Mehrere Rückgabewerte zu zweidimensionaler Liste hinzufügen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

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
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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]]
Zuletzt geändert von sls am Dienstag 26. Juni 2018, 22:01, insgesamt 2-mal geändert.
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

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
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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)))
When we say computer, we mean the electronic computer.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

__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?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@ThomasL: Die Aussage von __blackjack__ ist korrekt. Eine Funktion gibt stets nur einen Wert zurück.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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.
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ThomasL: Doch das war schon so gemeint. Warum sollte es nicht?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

@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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten