Seite 1 von 1

Frage zu List Comprehensions

Verfasst: Montag 21. Februar 2005, 10:39
von raist1314
Hallo,

ich habe folgendes Problem:

Ich hab eine Liste von Bereichen getrennt durch ':'

Code: Alles auswählen

_range = ['010:050', '200:250']
Daraus soll ein SQL Statement werden, das folgendermassen aussieht:
FELD2 BETWEEN '010' AND '050' OR
FELD2 BETWEEN '200' AND '250'

Ich dachte dabei irgendwie an sowas:

Code: Alles auswählen

_sql = " OR ".join("FELD2 BETWEEN '%s' AND '%s'" % (tmp[0], tmp[1]) (tmp.split(':') for tmp in _range))
Das klappt aber so nicht, ich fürchte mein Python Wissen ist hier nicht ausreichend oder ich seh den Wald vor lauter Bäumen nicht. Ist das überhaupt noch ein Fall für eine List Comprehension oder geht das so gar nicht und muss ich das doch alles in einer for Schleife machen?

Hoffe ihr könnt mir weiterhelfen.

Sebastian

Verfasst: Montag 21. Februar 2005, 11:11
von jens
Etwas kompliziert:

Code: Alles auswählen

_range = ['010:050', '200:250']

tmp = []
for i in _range:
    tmp.append( "FELD2 BETWEEN " + " AND ".join( i.split(":") ) )

tmp = " OR\n".join( tmp )

print tmp

Verfasst: Montag 21. Februar 2005, 11:26
von raist1314
jens hat geschrieben:Etwas kompliziert:

Code: Alles auswählen

_range = ['010:050', '200:250']

tmp = []
for i in _range:
    tmp.append( "FELD2 BETWEEN " + " AND ".join( _range[0].split(":") ) )

tmp = " OR\n".join( tmp )

print tmp
Das hatte ich soweit auch schon, ich dachte nur es würde mittels List Comprehension etwas eleganter gehen.

Sebastian

Verfasst: Montag 21. Februar 2005, 11:29
von jens
raist1314 hat geschrieben:Das hatte ich soweit auch schon, ich dachte nur es würde mittels List Comprehension etwas eleganter gehen.
OK, hab meine Sache mal kombiniert:

Code: Alles auswählen

_range = ['010:050', '200:250']

print " OR\n".join( ["FELD2 BETWEEN " + " AND ".join( i.split(":") ) for i in _range] )
Aber ist das eleganter??? Da blickt man doch eigentlich nicht mehr durch!

Verfasst: Montag 21. Februar 2005, 13:02
von raist1314
Aber ist das eleganter??? Da blickt man doch eigentlich nicht mehr durch!
Hmmm... Da hast du wohl recht, so elegant ist das wirklich nicht. Gibts vielleicht noch ne andere Lösung? Ich werd mal sehen, was ich noch so rausfinden kann.

Sebastian

Verfasst: Montag 21. Februar 2005, 13:37
von Leonidas
Hihi, etwas einfacher, ohne List Comprehension

Code: Alles auswählen

_range = ['010:050', '200:250']

print " OR\n".join("FELD2 BETWEEN " + " AND ".join( i.split(":") ) for i in _range)
... dafür mit Generator Expression: kompakter, mächtiger, höherer Angebfaktor 8)

Edit:
raist1314 hat geschrieben:Ist das überhaupt noch ein Fall für eine List Comprehension oder geht das so gar nicht und muss ich das doch alles in einer for Schleife machen?
Damit dieser Post überhaupt Sinn macht, hier eine Einleitung zu neueren Python Features.