Controlla la lunghezza dell’elenco in Python in 3 semplici passaggi

In questo articolo, esploreremo diverse tecniche per determinare la dimensione di una lista in Python, valutando l’efficienza di ciascuna.

Che cos’è una Lista in Python?

Una lista in Python è una struttura dati versatile che può contenere una sequenza ordinata di elementi di vario tipo. Questa caratteristica consente di memorizzare numeri interi, decimali, stringhe, valori booleani e persino altre liste all’interno di una singola lista.

    int_list = [1, 2, 3, 4, 5]
    print(int_list)  # Output: [1, 2, 3, 4, 5]

    float_list = [1.1, 2.2, 3.3, 4.4, 5.5]
    print(float_list) # Output: [1.1, 2.2, 3.3, 4.4, 5.5]

    string_list = ['Geekflare', 'Cloudflare', 'Amazon']
    print(string_list) # Output: ['Geekflare', 'Cloudflare', 'Amazon']

    boolean_list = [True, False]
    print(boolean_list) # Output: [True, False]

    nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]
    print(nested_list) # Output: [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]

    different_datatype_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
    print(different_datatype_list) # Output: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
  

Le liste in Python possono essere create utilizzando le parentesi quadre o attraverso la funzione costruttore list().

    square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
    print(square_bracket_list) # Output: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

    constructor_list = list((1, 1.1, 'winadmin.it', True, [1, 1.1, 'Geekflare', True]))
    print(constructor_list)  # Output: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
  

Entrambi i metodi producono risultati identici. Le liste sono mutabili, permettono elementi duplicati e possono essere accedute tramite indice.

Metodi per Determinare la Lunghezza di una Lista

  • Funzione integrata len()
  • Metodo length_hint del modulo operator
  • Funzione personalizzata con contatore

Metodo 1: Funzione Integrata len()

La funzione len() è uno strumento predefinito di Python, utilizzato per ottenere la lunghezza di una lista o di altri oggetti iterabili come insiemi, tuple e dizionari.

Esempio:

    languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
    languages_length = len(languages)
    print('La lunghezza della lista linguaggi è:', languages_length)
  

Output:

    La lunghezza della lista linguaggi è: 5
  

Assicurati di avere Python installato per provare gli esempi; in alternativa, puoi usare un compilatore online.

Metodo 2: Metodo length_hint dal Modulo operator

Il metodo length_hint del modulo operator viene utilizzato per ottenere una stima della lunghezza di un oggetto iterabile. Questo metodo non è disponibile come operatore integrato standard.

Esempio:

    import operator
    languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
    languages_length = operator.length_hint(languages)
    print('La lunghezza della lista linguaggi usando operator è:', languages_length)
  

Output:

    La lunghezza della lista linguaggi usando operator è: 5
  

Metodo 3: Funzione Personalizzata con Contatore

Questo metodo utilizza un ciclo for e un contatore per determinare la lunghezza di una lista. Implementeremo una funzione che riceve un iterabile e restituisce la sua lunghezza.

Funzione personalizzata:

    def iterable_count(iterable):
        length = 0
        for item in iterable:
            length += 1
        return length
  

Esempio:

    def iterable_count(iterable):
        length = 0
        for item in iterable:
            length += 1
        return length

    languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
    languages_length = iterable_count(languages)
    print('La lunghezza della lista linguaggi usando la funzione personalizzata è:', languages_length)
  

Output:

    La lunghezza della lista linguaggi usando la funzione personalizzata è: 5
  

Analisi Comparativa dei Tre Metodi

Analizziamo le prestazioni di ciascun metodo su liste di grandi dimensioni.

    import timeit
    import operator

    def iterable_count(iterable):
        length = 0
        for item in iterable:
            length += 1
        return length

    integer_list = list(range(1, 9999999))

    # Misurazione con len()
    start_time = timeit.default_timer()
    len_length = len(integer_list)
    print(timeit.default_timer() - start_time, 'Lunghezza della lista di interi con len():', len_length)

    # Misurazione con operator.length_hint
    start_time = timeit.default_timer()
    len_length = operator.length_hint(integer_list)
    print(timeit.default_timer() - start_time, 'Lunghezza della lista di interi con length_hint:', len_length)

    # Misurazione con funzione personalizzata
    start_time = timeit.default_timer()
    iterable_count_length = iterable_count(integer_list)
    print(timeit.default_timer() - start_time, 'Lunghezza della lista di interi con funzione personalizzata:', iterable_count_length)
  

Output:

    3.957189619541168e-06 Lunghezza della lista di interi con len(): 9999998
    3.0621886253356934e-06 Lunghezza della lista di interi con length_hint: 9999998
    0.4059128537774086 Lunghezza della lista di interi con funzione personalizzata: 9999998
  

Come si può notare, length_hint è più veloce su liste di milioni di elementi. Questo è dovuto al fatto che length_hint sfrutta il runtime di CPython, evitando il wrapper Python.

Analizziamo le prestazioni su liste di piccole dimensioni.

    import timeit
    import operator

    def iterable_count(iterable):
        length = 0
        for item in iterable:
            length += 1
        return length

    integer_list = list(range(1, 100))

    # Misurazione con len()
    start_time = timeit.default_timer()
    len_length = len(integer_list)
    print(timeit.default_timer() - start_time, 'Lunghezza della lista di interi con len():', len_length)

    # Misurazione con operator.length_hint
    start_time = timeit.default_timer()
    len_length = operator.length_hint(integer_list)
    print(timeit.default_timer() - start_time, 'Lunghezza della lista di interi con length_hint:', len_length)

    # Misurazione con funzione personalizzata
    start_time = timeit.default_timer()
    iterable_count_length = iterable_count(integer_list)
    print(timeit.default_timer() - start_time, 'Lunghezza della lista di interi con funzione personalizzata:', iterable_count_length)
  

Output:

    7.813796401023865e-07 Lunghezza della lista di interi con len(): 99
    1.1278316378593445e-06 Lunghezza della lista di interi con length_hint: 99
    3.462657332420349e-06 Lunghezza della lista di interi con funzione personalizzata: 99
  

In questo caso, len() risulta essere più veloce su liste di poche migliaia di elementi o meno.

In entrambi i casi, la nostra funzione personalizzata con contatore si rivela meno efficiente.

Conclusioni

In questo articolo, abbiamo esaminato diversi approcci per calcolare la lunghezza di una lista in Python e confrontato la loro velocità di esecuzione.