Thomas Rachel writes:
Am 09.05.2012 14:23 schrieb Olе Streicher:
In einer List comprehension funktioniert ja folgendes: mynewlist = [ foo(item) for item in myoldlist if bar(item) ] In einer Generator expression auch...
Yep.
Wenn man die Schleife aufdröseln will, geht das leider nicht so einfach: Warum geht hier nicht folgendes? for item in myoldlist if bar(item): mynewlist.append(foo(item))
Schwer zu sagen. Mir hat es auch schon gefehlt. Aber - auch wen die beiden gleich aussehen -: ich nehme an, daß die verschiedenen for-Inkarnationen grammatikalisch nicht viel miteinander zu tun haben.
Es wäre aber doch sicherlich schlauer, wenn "for" sich immer ähnlich verhält, oder? Man hat ja nicht umsonst das gleiche Keyword genommen.
Schöner wäre sicherlich einfach ein
for_stmt ::= "for" target_list "in" expression_list [list_iter or comp_iter]":" suite ["else" ":" suite]
- das würde auch verschachtelte Shleifen vereinfachen.
Ja; dort fehlt IMO auch ein for i in range(4) for j in range(5): print('%s * %s = %2s' % (i, j, i*j))
Ansonsten muß man sich eben mit for item in (item for item in myoldlist if bar(item)): behelfen.
... was nicht gerade übersichtlich aussieht :-(
BTW: In Deinem Fall ginge auch ein Einzeiler:
mynewlist.extend(foo(item) for for item in myoldlist if bar(item))
Das ist schon klar. Mein Problem ist aber Minidom: for c in f.childNodes if c.localName == 'header': for p in c.childNodes if p.localName == 'property': print('%s = %s' % (p.getAttribute('name'), p.getAttribute('value'))) was in dieser Form leichtverständlich ist, aber ohne den syntaktischen Zucker eben deutlich schwerer nachvollziehbar. Viele Grüße Ole