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

Frage zu List Comprehensions

Beitragvon raist1314 » Montag 21. Februar 2005, 10:39

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 21. Februar 2005, 11:11

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:

Beitragvon raist1314 » Montag 21. Februar 2005, 11:26

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 21. Februar 2005, 11:29

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:

Beitragvon raist1314 » Montag 21. Februar 2005, 13:02

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 21. Februar 2005, 13:37

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 Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]