Mai mult
Cum pot număra aparițiile unui element din listă?
Dat un element, cum pot conta sale apariții într-o listă în Python?
1404
22
Dat un element, cum pot conta sale apariții într-o listă în Python?
Dacă doriți doar un element's a conta, de a folosi "count" metoda:
Don't utilizați această opțiune dacă doriți să conta mai multe elemente. De asteptare "numere", într-o buclă necesită o separat trece pe lista pentru fiecare "numere", apel, care pot fi catastrofale pentru performanță. Dacă vrei să numeri toate elementele, sau chiar mai multe elemente, utilizați "Counter", cum este explicat în alte răspunsuri.
Dacă sunteți folosind Python 2.7 sau 3 și vrei numărul de apariții pentru fiecare element:
Numărarea de evenimente de un element într-o listă
Pentru numărarea aparițiilor doar un element din listă, puteți utiliza
count()
Numărarea aparițiilor toate articole într-o listă este, de asemenea, cunoscut sub numele de "verifica" - o listă, sau crearea unui contor cu înregistrare.
Numărare toate elementele cu count()
Să numere aparițiile de articole în " l " se poate folosi pur și simplu o listă de înțelegere și `count () metoda
(sau, în mod similar cu un dicționar
dict((x,l.count(x)) pentru x în set(l))
)Exemplu:
Numărare toate elementele cu Contor()
Alternativ, acolo's cel mai rapid "Counter" clasa de "colecții" biblioteca
Exemplu:
Cât de mult mai repede este Contra?
Am verificat cât mai repede "Counter" este pentru listele de numărare a voturilor. Am incercat ambele metode cu câteva valori de " n "și se pare că "Counter" este mai rapid printr-un factor constant de aproximativ 2.
Aici este script-ul am folosit:
Și de ieșire:
Un alt mod de a obține numărul de apariții ale fiecărui element, într-un dicționar:
lista.count(x)
returnează numărul de ori " x " apare într-o listăa se vedea: http://docs.python.org/tutorial/datastructures.html#more-on-lists
Aici's un exemplu de lista:
lista.conta
Nu's pe lista.conta` metoda
Aceasta funcționează bine pentru orice listă. Tupluri au această metodă la fel de bine:
# colecțiilor.Contra`
Și apoi, nu's colecții.Contra. Puteți arunca orice iterable într-un Contra, nu doar o listă, iar Contorul va păstra o structură de date de numărul de elemente.
Utilizare:
Contoare sunt bazate pe Python dicționare, cheile lor sunt elementele, astfel încât cheile trebuie să fie hashable. Ele sunt de fapt seturi care permit elemente redundante în ele.
Utilizarea în continuare a colecțiilor.Contra`
Puteți adăuga sau scădea cu iterables din contra:
Și tu poți face multi-set de operațiuni cu tejghea precum:
De ce nu panda?
Un alt răspuns sugerează:
Panda este o comună de bibliotecă, dar nu's nu în biblioteca standard. Adăugarea ca o cerință este non-trivial.
Există interna solutii pentru acest caz de utilizare în lista obiect în sine, precum și în biblioteca standard.
În cazul în care proiectul nu necesită deja panda, ar fi o prostie să-l facă o cerință doar pentru această funcționalitate.
Daca vrei sa conta toate valorile de la o dată o puteti face foarte rapid, folosind numpy tablouri și
bincount
, după cum urmeazăcare dă
Am'am comparat toate soluțiile propuse (și câteva altele noi) cu perfplot (un mic proiect de-al meu).
De numărare one element
Pentru suficient de mare matrice, se pare că
este ușor mai rapid decât alte soluții.
De numărare all elemente
Cum a fost stabilit înainte,
este ceea ce vrei.
Cod pentru a reproduce parcele:
Dacă puteți folosi panda", apoi " value_counts` este acolo pentru salvare.
Se sortează automat rezultatul în funcție de frecvență, precum și.
Dacă doriți ca rezultatul să fie într-o listă de lista, face ca mai jos
De ce nu folosesc Panda?
Ieșire:
Dacă sunteți în căutarea pentru un număr de un anumit element, spun o, încercați:
Ieșire:
Am avut această problemă astăzi și laminate propria mea soluție m-am gândit înainte de a verifica ATÂT. Asta:
este foarte, foarte lent pentru liste mari. Soluția mea
este de fapt un pic mai repede decât Contra soluție, cel puțin pentru Python 2.7.
Contele de toate elementele cu
itertools.groupby()
Un alt posibilitate pentru a obține numărul de toate elementele din listă ar putea fi de mijloace de itertools.groupby()`.
Cu "duplicat" contează
Se întoarce
Observați cum s-au combinat primele trei " a "'s ca primul grup, în timp ce alte grupuri de " a " sunt prezente mai jos pe lista. Acest lucru se întâmplă deoarece lista de intrare " L " nu a fost rezolvat. Acest lucru poate fi un beneficiu, uneori, dacă grupurile ar trebui să fie separate.
Cu unic contează
Dacă grup unic contează sunt dorite, doar sorta lista de intrare:
Se întoarce
Notă: Pentru a crea unic contează, multe alte răspunsuri oferi mai ușor și mai ușor de citit codul comparativ cu `groupby soluție. Dar este prezentat aici pentru a trage o paralelă cu duplicat conta exemplu.
Mai jos sunt trei solutii:
Cel mai rapid este folosind-o pentru buclă și stocarea într-un Dict.
Rezultat
Pentru a contoriza numărul de diverse elemente care au un tip comun:
dă
3
, nu 6Acesta a fost sugerat să folosească numpy's bincount, cu toate acestea, ea funcționează doar pentru tablouri 1d cu non-numere întregi negative. De asemenea, rezultă o matrice poate fi confuz (conține evenimente de numere întregi de la min la max de pe lista inițială, și seturi la 0 lipsă numere întregi).
O modalitate mai bună de a face cu numpy este de a utiliza unic funcția cu atributul
return_counts
setat la True. Returnează un tuplu cu o serie de valori unice și o serie de apariții ale fiecărui valoare unică.și atunci putem pereche-le ca
De asemenea, funcționează cu alte tipuri de date și "2d liste", de exemplu
Puteți folosi, de asemenea,
countOf
metoda de un built-in modul ["operator"] (https://docs.python.org/3/library/operator.html).Deși este foarte veche întrebare, dar cum am't găsi o linie una, am făcut-o.
Nu pot fi cele mai eficiente, necesită o trecere în plus pentru a elimina duplicatele.
Implementarea funcționale :
se întoarce :
sau de a reveni ca
dict
:se întoarce :
Acest lucru va returna suma de apariții ale your_value