Select Page

Listen filtern in Python

by | Sep 9, 2011 | Development

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.

Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

More posts on the topic Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen...