Contare le occorrenze di un elemento in un array unidimensionale in Python

Debolina Dasgupta 18 luglio 2021
  1. Usa collections per trovare il numero di occorrenze in un array in Python
  2. Usa la libreria NumPy per trovare il numero di occorrenze in un array in Python
Contare le occorrenze di un elemento in un array unidimensionale in Python

Mentre si lavora con un array, uno dei problemi principali che uno sviluppatore può affrontare è il conteggio del numero di occorrenze di un elemento. Immagina di avere una serie del numero di articoli venduti in un sito di e-commerce in 10 giorni, vorresti conoscere il numero di giorni in cui vengono venduti più di 100 articoli.

sales = [0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]

Il modo più semplice per risolvere è ottenere un conteggio del numero di volte in cui 100 si verifica nell’array.

Usa collections per trovare il numero di occorrenze in un array in Python

Le collections agiscono come contenitori per memorizzare raccolte di dati. Possiamo facilmente importare il modulo collections e usare la funzione Counter.

Controlla il codice qui sotto:

import collections

sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]  

print(collections.Counter(sales))

L’output risultante è un dizionario Python. Elenca quante volte si è verificato ogni elemento dell’array.

Tuttavia, se vogliamo stampare il numero di volte in cui 100 si verifica nell’array sales, possiamo recuperarlo dal dizionario.

>>>print(collections.Counter(sales)[100])
4

Il modulo Collection funziona anche con numeri e stringhe decimali.

floatarr=[0.7, 10.0, 10.1, .8, .7, .8, .2, .1, 10.0, 
10.0, .8, .8, .7, .7, .8]
print(collections.Counter(floatarr))
#Counter({0.8: 5, 0.7: 4, 10.0: 3, 10.1: 1, 0.2: 1, 0.1: 1})

stringarr=["george","mark","george","steve","george"]
print(collections.Counter(stringarr))
#Counter({'george': 3, 'mark': 1, 'steve': 1})

Usa la libreria NumPy per trovare il numero di occorrenze in un array in Python

Tuttavia, possiamo anche usare NumPy, che è una libreria definita in Python per gestire array di grandi dimensioni e contiene anche un gran numero di funzioni matematiche.

Esistono diversi modi per utilizzare le funzioni definite in NumPy per restituire i conteggi degli elementi in un array.

Usa la funzione unique in NumPy

La funzione unique insieme a Count, restituisce un dizionario del conteggio di ogni elemento. Funziona anche con numeri decimali e stringhe.

import collections, numpy

aUnique = numpy.array([0, 100, 100, 80, 70, 80, 20, 10, 100, 
100, 80, 70, 10, 30, 40])

unique, counts = numpy.unique(aUnique, return_counts=True)

print(dict(zip(unique, counts)))

Usa la funzione count_nonzero in NumPy

L’utilizzo del count_nonzero restituisce il conteggio dell’articolo che stiamo cercando. Fornisce un’interfaccia di facile lettura e meno righe di codice.

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10, 
100, 100, 80, 70, 10, 30, 40,"abc"])
>>>print(numpy.count_nonzero(aCountZero == "abc"))
1

count_nonzero funziona anche con numeri e stringhe decimali.

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,

100, 100, 80, 70, 10, 30, 40])

>>>print(numpy.count_nonzero(aCountZero == 100.1))
1

Usa la funzione bincount in NumPy - Solo per array con numeri interi

Tuttavia, se hai un array che ha solo numeri interi, puoi usare la funzione bincount di NumPy. La parte migliore è che restituisce i risultati come un array.

>>>abit = numpy.array([0, 6, 0, 10, 0, 1, 1, 0, 10, 9, 0, 1])

>>>print(numpy.bincount(abit))

[5 3 0 0 0 0 1 0 0 1 2]

Per i numeri nella matrice, il risultato mostra il conteggio degli elementi in ordine crescente. Ad esempio, 0 nell’array abit compare 5 volte e 10 2 volte come indicato dal primo e dall’ultimo elemento dell’array.

Articolo correlato - Python Array