Wenn es eine große Liste ist und Sie die Ids nur einmal verarbeiten müssen, dann gibt es auch Generatorausdrücke.
ids = (obj.id for obj in my_objects)
for id in ids:
do_something(id)
Ein Generator Ausdruck nicht unterstützt Random Access sondern Sie jede ID auf Anfrage erhalten und so vermeidet den Aufbau einer Liste alle auf einmal. Generatorausdrücke sind zu xrange
als Liste Comprehensions sind zu range
.
Eine weitere Einschränkung mit Generatorausdrücken ist, dass auf sie nur so lange zugegriffen werden kann, wie eine Ressource darin noch offen ist. Zum Beispiel wird der folgende Code fehlschlagen.
with open(filename) as f:
lines = (line for line in f)
# f is now closed
for line in lines:
print line
Das äquivalente Listenverständnis würde in diesem Fall funktionieren.
Recht .. Listenkomprehensionen. Vergiss diese :) – mpen