Seite 1 von 1

verschachtelte Schleife kompremieren

Verfasst: Montag 1. November 2010, 14:42
von Xynon1
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.

Re: verschachtelte Schleife kompremieren

Verfasst: Montag 1. November 2010, 14:54
von Hyperion
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))))

Re: verschachtelte Schleife kompremieren

Verfasst: Montag 1. November 2010, 14:56
von DasIch

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

Re: verschachtelte Schleife kompremieren

Verfasst: Montag 1. November 2010, 14:56
von /me
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
[...]

Re: verschachtelte Schleife kompremieren

Verfasst: Montag 1. November 2010, 15:03
von Xynon1
@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

Re: verschachtelte Schleife kompremieren

Verfasst: Montag 1. November 2010, 15:10
von /me
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.

Re: verschachtelte Schleife kompremieren

Verfasst: Montag 1. November 2010, 15:11
von Xynon1
Oha :shock:, danke!