Ich habe festgestellt, dass es eine verwandte Frage gibt, wie man herausfindet, ob mindestens ein Element in einer Liste vorhanden ist:
Wie kann man überprüfen, ob eines der folgenden Elemente in einer Liste enthalten ist?
Aber wie lässt sich am besten und pythonisch feststellen, ob alle Elemente in einer Liste vorhanden sind?
Beim Durchsuchen der Dokumente habe ich folgende Lösung gefunden:
>>> l = ['a', 'b', 'c']
>>> set(['a', 'b']) <= set(l)
True
>>> set(['a', 'x']) <= set(l)
False
Eine andere Lösung wäre:
>>> l = ['a', 'b', 'c']
>>> all(x in l for x in ['a', 'b'])
True
>>> all(x in l for x in ['a', 'x'])
False
Aber hier müssen Sie mehr tippen.
Gibt es noch andere Lösungen?
set(smaller) <= set(larger)
?Antworten:
Operatoren wie
<=
in Python werden im Allgemeinen nicht überschrieben, um etwas signifikant anderes als "kleiner als oder gleich" zu bedeuten. Es ist ungewöhnlich, dass die Standardbibliothek dies tut - es riecht für mich nach Legacy-API.Verwenden Sie die entsprechende und klarere Methode
set.issubset
. Beachten Sie, dass Sie das Argument nicht in eine Menge konvertieren müssen. Das erledigt es bei Bedarf für Sie.quelle
<=
undissubset
Bedeutung derselben Sache ziemlich einverstanden . Warum magst du es nicht?<=
für ein Set bedeutet, ohne es entweder in den Dokumenten nachzuschlagen oder vorher zu wissen, was es in der Set-Theorie bedeutet, während jeder weiß, wasissubset
automatisch bedeutet.Ich würde wahrscheinlich
set
auf folgende Weise verwenden:oder umgekehrt:
Ich finde es etwas lesbarer, aber es kann übertrieben sein. Mengen sind besonders nützlich, um Vereinigung / Schnittmenge / Unterschiede zwischen Sammlungen zu berechnen, aber in dieser Situation ist dies möglicherweise nicht die beste Option ...
quelle
MySet.issubset(MyOtherSet)
undMySet <= MyOtherSet
sind gleich.<=
was die Bedeutung hat, die es für Sequenzen hat: Man könnte erwarten, dass es eher eine Teilsequenz als eine lexikografische Reihenfolge bedeutet.<=
mit Sequenzen irgendwie auch seltsam anfühlt ...set(['a','a']).issubset(['a'])
kehrt zurückTrue
.Ich mag diese beiden, weil sie am logischsten erscheinen, wobei letztere kürzer und wahrscheinlich am schnellsten sind (hier mit
set
wörtlicher Syntax gezeigt, die auf Python 2.7 zurückportiert wurde ):quelle
Was ist, wenn Ihre Listen Duplikate wie diese enthalten:
Sets enthalten keine Duplikate. Die folgende Zeile gibt also True zurück.
Um nach Duplikaten zu zählen, können Sie den folgenden Code verwenden:
Die folgende Zeile gibt also False zurück.
quelle
Dies war, was ich online suchte, aber leider nicht online fand, sondern beim Experimentieren mit Python-Interpreter.
und wenn Sie eine lange Liste von Variablen in a haben
sublist variable
quelle
Ein Beispiel dafür, wie dies mit einem Lambda-Ausdruck gemacht wird, wäre:
quelle
Nicht der Fall von OP, aber - für alle, die Kreuzungen in Diktaten behaupten wollen und wegen schlechten Googelns hier gelandet sind (z. B. ich) - müssen Sie arbeiten mit
dict.items
:Dies liegt daran, dass
dict.items
Tupel von Schlüssel / Wert-Paaren zurückgegeben werden und wie jedes Objekt in Python austauschbar vergleichbar sindquelle