Schwierigkeit mit Problem

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.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast auch die Freiheit, es so zu machen, wie Du es willst, aber hier lesen auch Anfänger mit, und denen sollte man nicht unkommentiert solche Konstrukte stehen lassen.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Wenn es darum geht, sollte man aber auch keine Liste mit einer Listcomprehension erzeugen nur um sie in der nächsten Zeile in eine for-Schleife zu füttern.
saltyelo
User
Beiträge: 7
Registriert: Sonntag 16. Januar 2022, 21:42

Danke euch Leute ^^.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

rogerb hat geschrieben: Mittwoch 19. Januar 2022, 16:26 Wenn es darum geht, sollte man aber auch keine Liste mit einer Listcomprehension erzeugen nur um sie in der nächsten Zeile in eine for-Schleife zu füttern.
Wieso das denn nicht? Was waere denn deine Alternative?
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

__deets__ hat geschrieben: Mittwoch 19. Januar 2022, 16:39 Wieso das denn nicht? Was waere denn deine Alternative?
Das kann eigentlich nur ein Missverständnis sein, aber gut...

Also nicht so, wie von Sirius3 eine Liste erzeugt wird, die dann in der nächsten Zeile in die for-Schleife gegeben wird. Wo man dann insgesamt zweimal iteriert.

Code: Alles auswählen

stars = [1 + n ** 2 for n in range(-4, 5)]
for number in stars:
    print("*" * number)
Sondern so wie von imonbln gezeigt. Wo natürlich nur einmal iteriert wird.

Code: Alles auswählen

for x in range(-4, 5):
     mul = 5 - abs(x)
     print('+' * mul)
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Es ist ein Unterschied ob man ein Sprachkonstrukt falsch verwendet, oder ob es richtig verwendet wird, im Kontext aber etwas effizienteres möglich wäre. Wobei Effizienz ein komisches Argument ist wenn man das erstellen einer völlig sinnlosen Liste verteidigen möchte. Dann hättest Du mindestens mal so konsequent sein sollen eine „set comprehension“ zu verwenden, damit das einen konstanten Speicherverbrauch hat, die ganzen sinnfreien `None`-Werte zu sammeln. 😛 (Wäre auch noch näher an der Mathematik, denn die Zermelo-Fraenkel-Notation auf die die „comprehension“-Syntax anspielt, beschreibt ja im Original Mengen.)

Man könnte auch sagen die Liste hätte besser ein Generatorausdruck sein sollen, oder die Multiplikation der Zeichenkette hätte mit in der Liste oder dem Generatorausdruck stecken sollen. Das sind aber alles Fragen die nichts mit dem Punkt zu tun haben, dass eine „list comprehension“ dafür gedacht ist eine Liste zu erstellen und nicht dazu eine beliebige Schleife zu ersetzen bei der es nur im den Seiteneffekt und nicht um das sammeln von generierten Werten geht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Netter Versuch __blackjack__ :wink: es ging jetzt aber um die Frage ob man vor dem Iterieren die zu iterierenden Elemente in einer Listcomprehension aufsammeln muss, oder ob es dazu Alterntiven gibt. Frage mich aber bitte nicht warum das überhaupt ein Thema ist.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich wollte mit meinem Beispiel nur zeigen, wann eine Listcomprehension sinnvoll sein _kann_, und wann sie definitiv falsch ist.
Antworten