Wie kann ich bei einem bestimmten Element dessen Vorkommen in einer Liste in Python zählen?
1530
Wenn Sie nur die Anzahl eines Elements möchten, verwenden Sie die folgende count
Methode:
>>> [1, 2, 3, 4, 1, 4, 1].count(1)
3
Verwenden Sie diese Option nicht , wenn Sie mehrere Elemente zählen möchten. Das Anrufen count
in einer Schleife erfordert für jeden count
Anruf einen separaten Durchlauf über die Liste , was für die Leistung katastrophal sein kann. Wenn Sie alle Elemente oder nur mehrere Elemente zählen möchten, verwenden Sie Counter
, wie in den anderen Antworten erläutert.
mylist = [1,7,7,7,3,9,9,9,7,9,10,0] print sorted(set([i for i in mylist if mylist.count(i)>2]))
Verwenden
Counter
Sie diese Option, wenn Sie Python 2.7 oder 3.x verwenden und die Anzahl der Vorkommen für jedes Element angeben möchten:quelle
isinstance
. Wenn Sie sich also sicher sind, mit welchen Daten Sie arbeiten, ist es möglicherweise besser, eine benutzerdefinierte Funktion ohne Typ- und Instanzprüfung zu schreiben.isinstance
ruft an? Selbst bei Millionen von ZeichenfolgenCounter
umfasst der Aufruf nur einenisinstance
Aufruf, um zu überprüfen, ob es sich bei dem Argument um eine Zuordnung handelt. Sie haben höchstwahrscheinlich falsch eingeschätzt, was Sie die ganze Zeit essen.Counter
das Zählen großer Iterables statt für das Zählen vieler Iterables. Das Zählen einer iterierbaren Million Zeichenfolge geht schnellerCounter
als bei einer manuellen Implementierung. Wenn Sieupdate
mit vielen Iterables aufrufen möchten , können Sie die Dinge möglicherweise beschleunigen, indem Sie sie zu einem Iterable mit zusammenfügenitertools.chain
.Zählen der Vorkommen eines Elements in einer Liste
Zum Zählen der Vorkommen von nur einem Listenelement können Sie verwenden
count()
Das Zählen der Vorkommen aller Elemente in einer Liste wird auch als "Zählen" einer Liste oder Erstellen eines Zählzählers bezeichnet.
Zählen aller Elemente mit count ()
Um das Vorkommen von Elementen in
l
einem zu zählen, können Sie einfach ein Listenverständnis und diecount()
Methode verwenden(oder ähnlich mit einem Wörterbuch
dict((x,l.count(x)) for x in set(l))
)Beispiel:
Alle Gegenstände mit Counter zählen ()
Alternativ gibt es die schnellere
Counter
Klasse aus dercollections
BibliothekBeispiel:
Wie viel schneller ist Counter?
Ich habe überprüft, wie viel schneller es
Counter
ist, Listen zu zählen. Ich habe beide Methoden mit ein paar Werten von ausprobiertn
und es scheint, dass diesCounter
um einen konstanten Faktor von ungefähr 2 schneller ist.Hier ist das Skript, das ich verwendet habe:
Und die Ausgabe:
quelle
Counter
ist viel schneller für größere Listen. Die Listenverständnismethode ist O (n ^ 2),Counter
sollte O (n) sein.isinstance
. Wenn Sie sich also sicher sind, mit welchen Daten Sie arbeiten, ist es möglicherweise besser, eine benutzerdefinierte Funktion ohne Typ- und Instanzprüfung zu schreiben.Eine andere Möglichkeit, die Anzahl der Vorkommen jedes Elements in einem Wörterbuch zu ermitteln:
quelle
n * (number of different items)
Operationen benötigt, ohne die Zeit zu zählen, die zum Erstellen des Sets benötigt wird. Verwendencollections.Counter
ist wirklich viel besser.i
, da versucht wird, mehrere Schlüssel mit demselben Wert in ein Wörterbuch einzugeben.dict((i, a.count(i)) for i in a)
list.count(x)
Gibt zurück, wie oftx
in einer Liste angezeigt wirdSiehe: http://docs.python.org/tutorial/datastructures.html#more-on-lists
quelle
Hier ist eine Beispielliste:
list.count
Da ist die
list.count
MethodeDies funktioniert gut für jede Liste. Tupel haben auch diese Methode:
collections.Counter
Und dann gibt es Sammlungen. Sie können jedes iterable Element in einen Zähler ausgeben, nicht nur in eine Liste, und der Zähler behält eine Datenstruktur der Anzahl der Elemente bei.
Verwendungszweck:
Zähler basieren auf Python-Wörterbüchern, ihre Schlüssel sind die Elemente, daher müssen die Schlüssel hashbar sein. Sie sind im Grunde wie Mengen, die redundante Elemente in sie zulassen.
Weitere Verwendung von
collections.Counter
Sie können iterable von Ihrem Zähler addieren oder subtrahieren:
Mit dem Zähler können Sie auch Operationen mit mehreren Sätzen ausführen:
Warum nicht Pandas?
Eine andere Antwort schlägt vor:
Pandas ist eine gängige Bibliothek, aber nicht in der Standardbibliothek. Das Hinzufügen als Anforderung ist nicht trivial.
Für diesen Anwendungsfall gibt es sowohl im Listenobjekt selbst als auch in der Standardbibliothek integrierte Lösungen.
Wenn für Ihr Projekt noch keine Pandas erforderlich sind, wäre es dumm, es nur für diese Funktionalität erforderlich zu machen.
quelle
Ich habe alle vorgeschlagenen Lösungen (und einige neue) mit perfplot (einem kleinen Projekt von mir) verglichen .
Zählen einen Artikel
Bei ausreichend großen Arrays stellt sich heraus, dass
ist etwas schneller als die anderen Lösungen.
Zählen Sie alle Artikel
Wie bereits festgestellt ,
ist was du willst.
Code zur Reproduktion der Diagramme:
2.
quelle
Wenn Sie alle Werte gleichzeitig zählen möchten, können Sie dies sehr schnell mit numpy-Arrays und
bincount
wie folgt tunwas gibt
quelle
Wenn Sie verwenden können
pandas
,value_counts
ist es zur Rettung da.Das Ergebnis wird automatisch auch nach Häufigkeit sortiert.
Wenn Sie möchten, dass das Ergebnis in einer Liste aufgeführt ist, gehen Sie wie folgt vor
quelle
Warum nicht Pandas benutzen?
Ausgabe:
Wenn Sie nach einer Zählung eines bestimmten Elements suchen, sagen Sie a , versuchen Sie:
Ausgabe:
quelle
Ich hatte heute dieses Problem und habe meine eigene Lösung entwickelt, bevor ich daran dachte, SO zu überprüfen. Diese:
ist sehr, sehr langsam für große Listen. Meine Lösung
ist tatsächlich ein bisschen schneller als die Counter-Lösung, zumindest für Python 2.7.
quelle
quelle
Nachfolgend sind die drei Lösungen aufgeführt:
Am schnellsten ist es, eine for-Schleife zu verwenden und in einem Dict zu speichern.
Ergebnis
quelle
Anzahl aller Elemente mit
itertools.groupby()
Eine andere Möglichkeit, die Anzahl aller Elemente in der Liste zu ermitteln, könnte mittels sein
itertools.groupby()
.Mit "Duplikat" zählt
Kehrt zurück
Beachten Sie, wie die ersten drei
a
als erste Gruppe kombiniert wurden , während andere Gruppena
weiter unten in der Liste vorhanden sind. Dies geschieht, weil die EingabelisteL
nicht sortiert wurde. Dies kann manchmal von Vorteil sein, wenn die Gruppen tatsächlich getrennt sein sollten.Mit einzigartigen Zählungen
Wenn eindeutige Gruppenzahlen gewünscht werden, sortieren Sie einfach die Eingabeliste:
Kehrt zurück
Hinweis: Zum Erstellen eindeutiger Zählungen bieten viele der anderen Antworten im Vergleich zur
groupby
Lösung einen einfacheren und besser lesbaren Code . Hier wird jedoch gezeigt, dass eine Parallele zum Beispiel für die doppelte Anzahl gezogen wird.quelle
Es wurde vorgeschlagen, den Bincount von numpy zu verwenden , dies funktioniert jedoch nur für 1d-Arrays mit nicht negativen Ganzzahlen . Das resultierende Array kann auch verwirrend sein (es enthält die Vorkommen der Ganzzahlen von min bis max der ursprünglichen Liste und setzt die fehlenden Ganzzahlen auf 0).
Eine bessere Möglichkeit, dies mit numpy zu tun, besteht darin, die eindeutige Funktion mit dem Attribut
return_counts
True zu verwenden. Es gibt ein Tupel mit einem Array der eindeutigen Werte und einem Array der Vorkommen jedes eindeutigen Werts zurück.und dann können wir sie als koppeln
Es funktioniert auch mit anderen Datentypen und "2d-Listen", z
quelle
So zählen Sie die Anzahl der verschiedenen Elemente mit einem gemeinsamen Typ:
gibt
3
nicht 6quelle
Es ist zwar eine sehr alte Frage, aber da ich keinen Einzeiler gefunden habe, habe ich einen gemacht.
quelle
Sie können auch die
countOf
Methode eines integrierten Moduls verwendenoperator
.quelle
countOf
wird umgesetzt? Wie verhält es sich mit dem Offensichtlicherenlist.count
(was profitiert von der C-Implementierung)? Gibt es irgendwelche Vorteile?Möglicherweise nicht die effizienteste, erfordert einen zusätzlichen Durchgang, um Duplikate zu entfernen.
Funktionale Implementierung:
kehrt zurück :
oder zurückgeben als
dict
:kehrt zurück :
quelle
Dies gibt die Anzahl der Vorkommen Ihres_Wertes zurück
quelle
Ich würde verwenden
filter()
, nehmen Sie Lukasz 'Beispiel:quelle
Wenn Sie eine Reihe von Vorkommen für das jeweilige Element wünschen:
quelle
quelle
Dadurch wird rekursiv gezählt oder nach dem Element in der Liste gesucht, auch wenn es in der Liste der Listen enthalten ist
quelle