verschachtelte Schleife kompremieren

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
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Gibt es eine Möglichkeit auch verschachtelte Schleifen zu kompremieren, also

Code: Alles auswählen

for x in range(10):
    for y in range(10):
         x + y

#kann man das irgendwie in eine solche Form bringen ?
[x + y for x,y in range(10), range(10)]
Frage ist rein Interesserhalber.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Für diesen speziellen Fall ginge das hier:

Code: Alles auswählen

In [31]: from itertools import product

In [32]: map(sum, (product(range(10), range(10))))
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

from itertools import product
from operator import add

map(add, *zip(*product(range(10), range(10))))
EDIT: :oops: sum() ist sicherlich eleganter
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Xynon1 hat geschrieben:

Code: Alles auswählen

for x in range(10):
    for y in range(10):
         x + y

#kann man das irgendwie in eine solche Form bringen ?
[x + y for x,y in range(10), range(10)]
Das erste Beispiel liefert als Ergebnis im Prinzip ja nun gar nichts, aber anscheinend möchtest du als Ergebnis eine Liste mit der Addition der Werte haben.

Code: Alles auswählen

result = [x+y for x in range(10) for y in range(10)]
Du könntest natürlich auch einen Generator erstellen

Code: Alles auswählen

>>> func = (x+y for x in range(10) for y in range(10))
>>> func.next()
0
>>> func.next()
1
>>>for i in func:
>>>    print i
2
3
4
5
6
[...]
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@Hyperion
Ja, das ist mir bekannt, trotzdem Danke

@DasIch
Mir gings zwar um kompremieren, aber das ist etwas übertrieben
bzw sum() nützt mir ja nichts

@/me
genau das meinte ich

Code: Alles auswählen

result = [x+y for x in range(10) for y in range(10)]
man stand ich auf dem Schlauch, bin dreimal dran vorbei
war bei [x+y for x in range(10), for y in range(10)] am Ende angekommen :mrgreen:

Edit: Nochmal damit ich das klar gestellt habe, wie ich im Threadnamen geschrieben habe, ging es mir um die möglickeit die Listen kompremiert zu verschachteln, die Rechenoperation ist mir ziemlich egal
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Xynon1 hat geschrieben:[...] ging es mir um die möglickeit die Listen kompremiert zu verschachteln [...]
Spelling Hint für bessere Suchergebnisse via Google: Kompression vs. komprimiert.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Oha :shock:, danke!
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten