@Nils83: Ich hätte sogar zwei Ideen. Zum einen gibt das Konstrukt einen `SyntaxError`. Wenn es zu kompliziert ist, um es in einen Ausdruck zu quetschen, ist es durchaus erlaubt mehrere Anweisungen zu benutzen.
Dann ist es nicht gerade besonders Effizient dauernd `c.split()` aufzurufen nur um dann jeweils ein Element aus dem Ergebnis zu nehmen.
Last but not least, und das kann man wieder ganz gut im Interpreter ausprobieren:
Code: Alles auswählen
In [14]: a = '2 20000.0000 20000.0000 20 2'
In [15]: a.split()
Out[15]: ['2', '20000.0000', '20000.0000', '20', '2']
In [16]: a.split()[4]
Out[16]: '2'
In [17]: a.split()[4] == 2
Out[17]: False
In [18]: a.split()[4] == '2'
Out[18]: True
Mit ein paar mehr Zeilen und ungetestet:
Code: Alles auswählen
from itertools import imap, izip
def make_convert_row(convert_funcs)
def convert_row(row):
return [func(column) for func, column in izip(convert_funcs, row)]
return convert_row
def get_plants(data):
convert_row = make_convert_row((int, float, float, int, int))
rows = data.split('\n')[7:-2]
plants = dict((row[0], (row[1], row[2]))
for row in imap(convert_row, rows)
if row[4] == 2)
print 'plants', plants
@Costi: Deine beiden Beispiele sind syntaktisch falsch und ausserdem gibt's mittlerweile Generatorausdrücke mit runden Klammern, wobei man die weglassen kann, wenn sowieso schon Klammern da stehen. Zum Beispiel im Aufruf von `dict()`.
Code: Alles auswählen
In [23]: (x for x in xrange(10) if x % 2)
Out[23]: <generator object at 0x83e970c>
In [24]: list(x for x in xrange(10) if x % 2)
Out[24]: [1, 3, 5, 7, 9]