Überprüfen Sie, ob die Liste der Objekte ein Objekt mit einem bestimmten Attributwert enthält


101

Ich möchte überprüfen, ob meine Objektliste ein Objekt mit einem bestimmten Attributwert enthält.

class Test:
    def __init__(self, name):
        self.name = name

# in main()
l = []
l.append(Test("t1"))
l.append(Test("t2"))
l.append(Test("t2"))

Ich möchte eine Möglichkeit prüfen, ob die Liste beispielsweise ein Objekt mit Namen enthält "t1". Wie geht das? Ich habe https://stackoverflow.com/a/598415/292291 gefunden .

[x for x in myList if x.n == 30]               # list of all matches
any(x.n == 30 for x in myList)                 # if there is any matches
[i for i,x in enumerate(myList) if x.n == 30]  # indices of all matches

def first(iterable, default=None):
    for item in iterable:
        return item
    return default

first(x for x in myList if x.n == 30)          # the first match, if any

Ich möchte nicht jedes Mal die gesamte Liste durchgehen, ich muss nur wissen, ob es eine Instanz gibt, die übereinstimmt. Wird first(...)oder any(...)oder etwas anderes das tun?


Die first()Funktion ist als eingebaute Funktion verfügbar next().
Sven Marnach

Antworten:


166

Wie Sie der Dokumentation entnehmen können, schließt die any()Funktion kurz und kehrt zurück True, sobald eine Übereinstimmung gefunden wurde.

any(x.name == "t2" for x in l)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.