Conteggio degli elementi in una lista in Python

Un'altra operazione fondamentale che è possibile applicare ad una lista in Python è il conteggio degli elementi o enumerazione degli elementi. In generale, non si tratta semplicemente di sapere quanti elementi sono presenti in una lista, ma di sapere quanti elementi soddisfano una certa condizione.

In questa lezione vedremo ben tre modi per effettuare operazioni di conteggio in Python: la funzione len, il metodo count e le comprensioni di lista.

Operazioni di Conteggio per le liste

Abbiamo visto, nelle lezioni precedenti, che una lista è un contenitore di elementi o oggetti e che, in particolare, si tratta di una sequenza ordinata. In quanto contenitori mutabili abbiamo visto le operazioni più comuni per aggiungere, rimuovere e modificare gli elementi di una lista.

Adesso vedremo una serie di operazioni che è possibile effettuare su di una lista per contare o enumerare gli elementi. Partiamo dalla definizione:

Definizione

Conteggio o Enumerazione

L'operazione di conteggio, o operazione di enumerazione, può essere intesa come una funzione che prende in ingresso un contenitore, quale è una lista, e una condizione e restituisce un numero intero che rappresenta il numero di elementi che soddisfano la condizione.

Formalmente, la funzione di conteggio può essere definita come segue. Dato un contenitore C che contiene n elementi e_i:

\text{contenitore: } \, C = \left\{ e_1, e_2, e_3, \dots, e_n \right\}

Sia data una condizione, ossia una funzione che prende in ingresso un elemento e_i e restituisce un valore booleano, \text{true} o \text{false}:

\text{condizione: } \, \phi: C \to \left\{ \text{true}, \text{false} \right\}

La funzione di conteggio, f, è definita come segue:

\text{conteggio: } \, f: C \times \phi \to \mathbb{N}

Ossia, la funzione di conteggio prende in ingresso il contenitore C e la condizione \phi e restituisce un numero intero che rappresenta il numero di elementi che soddisfano la condizione.

Nel caso in cui la condizione è assente oppure è sempre vera, la funzione di conteggio restituisce semplicemente il numero di elementi presenti nella lista.

In Python esistono vari modi per effettuare operazioni di conteggio. Vediamo quali sono.

Conteggio con la funzione len

Abbiamo già visto nella funzione sulle operazioni di base per le liste la funzione len che restituisce il numero di elementi presenti in una lista.

Tale funzione può essere vista come un'operazione di conteggio in cui la condizione è sempre vera, pertanto restituisce semplicemente il numero di elementi presenti nella lista.

Vediamo un esempio:

>>> lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> len(lista)
10

Conteggio con la funzione count

In Python è presente un metodo delle liste, count, che permette di effettuare operazioni di conteggio. Tale metodo prende in ingresso un elemento e restituisce il numero di volte che tale elemento è presente nella lista.

Vediamo un esempio:

>>> lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lista.count(5)
1

In questo caso, quando si usa il metodo count la condizione equivale all'uguaglianza tra l'elemento passato come parametro e gli elementi della lista. Internamente, l'interprete Python scorre la lista e controlla se l'elemento passato come parametro è uguale ad ogni elemento della lista. Se l'uguaglianza è vera, allora il contatore viene incrementato di uno.

Possiamo, infatti, implementare il metodo count in Python come segue:

def count(lista, elemento):
    contatore = 0
    for elemento_lista in lista:
        if elemento == elemento_lista:
            contatore += 1
    return contatore

Proviamo ad applicare il metodo count ad una lista di stringhe:

>>> lista = ["ciao", "come", "va", "ciao", "come", "va"]
>>> lista.count("ciao")
2

Il fatto che il metodo count utilizzi internamente l'operatore di uguaglianza è un dettaglio molto importante. Vedremo in seguito, infatti, quando studieremo gli oggetti che se non è definito tale operatore per i nostri oggetti oppure se è definito in modo diverso, il metodo count non funzionerà come ci aspettiamo.

Ricapitolando:

Definizione

Metodo count per le liste

Il metodo count è un metodo delle liste che prende in ingresso un elemento e restituisce il numero di volte che tale elemento è presente nella lista.

Quando effettua il conteggio, il metodo count utilizza l'operatore di uguaglianza, ==, per controllare se l'elemento passato come parametro è uguale ad ogni elemento della lista. Se l'uguaglianza è vera, allora il contatore viene incrementato di uno.

Conteggio usando le Comprensioni di Lista

Il metodo count permette di effettuare operazioni di conteggio, ma nella sua funzionalità è limitato in quanto sfrutta semplicemente l'uguaglianza.

Immaginiamo una lista di numeri come la seguente:

>>> lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Supponiamo di voler contare il numero di elementi maggiori o uguali a 5. Con il metodo count non possiamo farlo. Una prima soluzione è quella di utilizzare un ciclo for:

contatore = 0
for elemento in lista:
    if elemento >= 5:
        contatore += 1

Possiamo, tuttavia, utilizzare le Comprensioni di Lista per ottenere lo stesso risultato. Ad esempio, possiamo scrivere:

contatore = len([elemento for elemento in lista if elemento >= 5])

In questo caso, abbiamo usato, dapprima, la comprensione di lista per creare una nuova lista che contiene solo gli elementi maggiori o uguali a 5. Successivamente, abbiamo utilizzato la funzione len per ottenere il numero di elementi presenti nella lista.

Proviamo con un altro esempio. Supponiamo di voler contare il numero di stringhe presenti in una lista che iniziano con la lettera c. Possiamo scrivere:

lista = ["ciao", "come", "va", "ciao", "come", "va"]
contatore = len([elemento for elemento in lista if elemento[0] == "c"])

Ricapitolando:

Definizione

Conteggio con la Comprensione di Liste

Per effettuare l'operazione di conteggio sfruttando la Comprensione di Liste, possiamo usare lo schema seguente:

contatore = len([elemento for elemento in lista if condizione])

In Sintesi

In questa lezione ci siamo concentrati sull'operazione generale di conteggio di elementi di una lista. Abbiamo visto che l'operazione di conteggio restituisce il numero di elementi che soddisfano una condizione. In Python esistono tre modi per effettuare operazioni di conteggio:

  • La funzione len che restituisce il numero di elementi presenti nella lista; in tal caso la condizione è sempre vera;
  • Il metodo count che restituisce il numero di volte che un elemento è presente nella lista; in tal caso la condizione è l'uguaglianza;
  • Le Comprensioni di Lista che offrono la maggiore flessibilità.