Seite 1 von 1

List Comprehension mit 2 variablen

Verfasst: Donnerstag 5. Juli 2007, 10:59
von akratellio
Hallo liebe Leute,

ich würde gern zwei Variablen an eine Funktion übergeben und dies
in List Comprehension.

Wie ich LC mit einer Variable benutze ist mir klar

Code: Alles auswählen

return [i for i in seq]

eigentlich hätte ich ja gern sowas:

Code: Alles auswählen

#pseudocode
return [i*j for i in seq and j in seq]

sowas wie reduce, nur ohne reduce...

Ich hoffe ihr wißt was ich meine

akratellio

Verfasst: Donnerstag 5. Juli 2007, 11:06
von birkenfeld
Du willst aber nicht i und j aus derselben Sequenz, oder?

Code: Alles auswählen

return [i*j for (i, j) in zip(seq1, seq2)]


Verfasst: Donnerstag 5. Juli 2007, 11:11
von N317V
Was Dein Pseudocode machen würde ist ja das selbe wie

Code: Alles auswählen

[i**2 for i in seq]
weil i und j ja pro Durchgang immer das selbe sind.
Aber ich glaub nicht, dass es das ist, was Du willst.

Verfasst: Donnerstag 5. Juli 2007, 11:12
von akratellio
Hallo Birkenfeld,

danke für die fixe Antwort,
eigentlich sollen i und j aus der gleichen Sequenz sein, aber j soll das nachfolgende Element von i sein.
(So wie bei reduce() )

akratellio

PS. Hab erst jetzt bemerkt, dass ich ja bei "Links und Tutorials" poste,
kann jmd meinen Beitrag vielleicht in allg. Fragen verschieben??

Verfasst: Donnerstag 5. Juli 2007, 13:24
von BlackJack
Also ich habe immer noch nicht verstanden welche der vielen möglichen Varianten Du haben möchtest. Kannst Du vielleicht ein konkretes Beispiel Eingabe -> Rechnung -> Ausgabe geben, oder eine Funktion die das gewünschte tut, schreiben und zeigen?

Edit: @N317V: Das ist nicht zwangsläufig das gleiche wie Deine "listcomp" weil `seq` auch ein Iterator sein könnte.

Verfasst: Donnerstag 5. Juli 2007, 14:41
von EyDu
akratellio hat geschrieben:eigentlich sollen i und j aus der gleichen Sequenz sein, aber j soll das nachfolgende Element von i sein.
Suchst du vielleicht so etwas:

Code: Alles auswählen

[(x,y) for x,y in zip(seq, seq[1:])]

Verfasst: Donnerstag 5. Juli 2007, 17:14
von veers
EyDu hat geschrieben:

Code: Alles auswählen

[(x,y) for x,y in zip(seq, seq[1:])]
Wozu dient denn da die List comprehension?

Code: Alles auswählen

In [4]: [(x,y) for x,y in zip(seq, seq[1:])] == zip(seq, seq[1:])
Out[4]: True

Re: List Comprehension mit 2 variablen

Verfasst: Freitag 6. Juli 2007, 07:13
von Michael Schneider
Hi Akratellio!
akratellio hat geschrieben:

Code: Alles auswählen

#pseudocode
return [i*j for i in seq and j in seq]
Ich weiß, es ist nicht was Du willst, aber eine LC mit zwei Variablen über eine Sequenz erzeugst Du so:

Code: Alles auswählen

seq = range(5)
print [i*j for i in seq for j in seq]
Grüße,
Michael

Verfasst: Freitag 6. Juli 2007, 10:59
von EyDu
veers hat geschrieben:Wozu dient denn da die List comprehension?
Vielleicht ein etwas ungeschicktes Beispiel :-)

Code: Alles auswählen

[x*y for x,y in zip(seq, seq[1:])]
wäre wohl besser geeignet gewesen.