2014-03-07 14 views
6

Wenn ich diese Liste habe;Wie überprüfe ich, ob alle Elemente in einer Liste identisch sind?

mylist = ['n', 'n', '4', '3', 'w'] 

Wie bekomme ich es, um die Liste zu lesen, und mir sagen, ob sie alle gleich sind oder nicht?

Ich bin mir bewusst, dass es leicht zu sagen ist, dass sie in diesem Beispiel nicht alle gleich sind. Ich habe viel größere Listen, die ich gerne für mich lesen würde.

Würde gehe ich über dieses mit:

min(...) 

Wenn ja, wie würde ich jedes Listenelement-Eingang?

Antwort

13

Sie können wie diese in ihnen

len(set(mylist)) == 1 

Erklärung Satz verwenden

Sets speichern nur Unikate. Wir versuchen also, die Liste in ein Set zu konvertieren. Wenn die Menge nach der Konvertierung mehr als ein Element enthält, bedeutet dies, dass nicht alle Elemente der Liste identisch sind.

Hinweis: Wenn die Liste nicht abspeicherbare Elemente enthält (wie Listen, benutzerdefinierte Klassen usw.), kann die Methode set nicht verwendet werden. Aber wir können die erste Methode von @falsetru vorgeschlagen verwenden,

all(x == mylist[0] for x in mylist) 

Vorteile:

  1. Es funktioniert sogar mit unhashable Typen

  2. Es ist nicht ein weiteres temporäres Objekt erstellen in Erinnerung.

  3. Es schließt nach dem ersten Fehler kurz. Wenn das erste und das zweite Element nicht übereinstimmen, gibt es sofort False zurück, während im set Ansatz alle Elemente verglichen werden müssen. Also, wenn die Liste riesig ist, sollten Sie den all Ansatz bevorzugen.

  4. Es funktioniert, auch wenn die Liste tatsächlich leer ist. Wenn im iterable keine Elemente vorhanden sind, gibt allTrue zurück. Aber die leere Liste wird eine leere set für die schaffen die Länge 0.

+1

Das ist wirklich schlau – Tyler

+0

wünschen mein Geist wud arbeiten so: P – Gogo

+3

Beachten Sie, dass dies nur auf hashable Elemente funktioniert.Dies würde beispielsweise nicht in einer Liste von Listen funktionieren. –

6

Mit all und generator expression:

all(x == mylist[0] for x in mylist) 

Alternative:

mylist.count(mylist[0]) == len(mylist) 

HINWEIS Die erste wird aufhören, sobald es gefunden hat, dass es einen anderen Gegenstand in der Liste gibt, während die Alternative nicht.

+2

+1: für den frühen Stop – tom10

+1

Ich finde das letztere mit '.count' ein bisschen zuverlässiger und robuster. +1 für das Vorschlagen einer alternativen Methode! – 3kstc

Verwandte Themen