Zum Abschluss dieser Woche kommt von meiner Seite noch ein wenig Code. Angenommen wir haben eine Liste von Benutzern (users) und möchten nur auf den gesperrten weiterarbeiten, so können wir diese, auf verschiedene Art und Weise filtern:
disabled_users = []
for user in users:
if user.disabled:
disabled_users.append(user)
Das ganze geht natürlich auch noch etwas eleganter mit list comprehension oder der Built-in-Funktion filter:
disabled_users = [user for user in users if user.disabled]
def is_disabled(user):
"""Returns True if user is disabled else False.
"""
...
disabled_users = filter(is_disabled, users)
# oder:
disabled_users = [user for user in users if is_disabled(user)]
Die oberen Beispiele erzeugen jeweils eine neue Liste. Um dies zu verhindern, arbeiten wir mit folgender Modifikation auf Referenzen des Listeninhalts:
users[:] = [user for user in users if user.disabled]
Der “[:]”-Operator erzeugt uns hier eine shallow copy der Liste.
Wer jetzt noch den Unterschied zwischen Generatoren und Iteratoren kennt, bekommt mit folgender Zeile die ultimative 🙂 Art, Listen zu filtern:
users[:] = (user for user in users if user.disabled)
Schönes Wochenende.
0 Comments