Nehmen wir an, ich erstelle eine einfache Klasse, die ähnlich wie eine C-Struktur funktioniert und nur Datenelemente enthält. Ich versuche herauszufinden, wie eine Liste von Objekten nach Objekten mit einem Attribut durchsucht wird, das einem bestimmten Wert entspricht. Im Folgenden finden Sie ein einfaches Beispiel, um zu veranschaulichen, was ich versuche.
Zum Beispiel:
class Data:
pass
myList = []
for i in range(20):
data = Data()
data.n = i
data.n_squared = i * i
myList.append(data)
Wie würde ich die myList-Liste durchsuchen, um festzustellen, ob sie ein Element mit n == 5 enthält?
Ich habe gegoogelt und die Python-Dokumente durchsucht, und ich glaube, ich kann dies mit einem Listenverständnis tun, bin mir aber nicht sicher. Ich könnte hinzufügen, dass ich übrigens Python 2.4.3 verwenden muss, sodass mir keine neuen Funktionen von gee-whiz 2.6 oder 3.x zur Verfügung stehen.
Antworten:
Sie können eine Liste aller übereinstimmenden Elemente mit einem Listenverständnis erhalten:
Wenn Sie einfach nur feststellen möchten, ob die Liste ein Element enthält , das übereinstimmt, und dies (relativ) effizient tun möchten , können Sie dies tun
quelle
Einfach, elegant und kraftvoll:
Ein Generatorausdruck in Verbindung mit einem eingebauten… (Python 2.5+)
Verwendet das integrierte Python
any()
, das wie folgt definiert ist:quelle
any(x for x in mylist if x['n'] == 10)
, ist aber eine gute IdeeVergessen wir der Vollständigkeit halber nicht die einfachste Sache, die möglicherweise funktionieren könnte:
quelle
quelle
quelle
lambda
s.Sie können
in
nach einem Element in einer Sammlung suchen und anhand eines Listenverständnisses das Feld extrahieren, an dem Sie interessiert sind. Dies (funktioniert für Listen, Mengen, Tupel und alles, was definiert__contains__
oder definiert__getitem__
).Siehe auch:
quelle
Sie sollten Ihrer Klasse eine
__eq__
und eine__hash__
Methode hinzufügenData
, um zu überprüfen, ob die__dict__
Attribute gleich sind (gleiche Eigenschaften) und ob auch ihre Werte gleich sind.Wenn Sie das getan haben, können Sie verwenden
Das
in
Schlüsselwort prüft, obtest
inmyList
.Wenn Sie nur eine
n
Eigenschaft in möchten, könnenData
Sie Folgendes verwenden:quelle
Verwenden Sie ein Wörterbuch:
quelle
Sie können dies auch mit der Funktion next () tun.
quelle