Frage zu List Comprehensions

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
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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
Zuletzt geändert von jens am Montag 21. Februar 2005, 11:28, insgesamt 1-mal geändert.
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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!
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten