List Comprehension mit 2 variablen

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
akratellio
User
Beiträge: 4
Registriert: Mittwoch 4. Juli 2007, 08:57

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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)]

Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
akratellio
User
Beiträge: 4
Registriert: Mittwoch 4. Juli 2007, 08:57

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??
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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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:])]
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Antworten