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 modulooperator
- 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.