Sostieni AppuntiFacili con una piccola donazione su PayPal
Dona con PayPalPython offre diverse strutture dati per gestire collezioni di elementi:
In questa lezione confronteremo le caratteristiche principali di ciascuna.
| Tipo | Ordinamento | Modificabile | Elementi duplicati | Accesso |
|---|---|---|---|---|
| List | Sì | Sì | Sì | Indice |
| Tuple | Sì | No | Sì | Indice |
| Set | No | Sì | No | Non indicizzato |
| Dictionary | No (chiavi) | Sì | Valori: sì; Chiavi: no | Chiave |
append(), remove(), pop(), slicing, concatenazioneadd(), remove(), union(), intersection(), difference()get(), keys(), values(), items(), pop()| Struttura | Quando usarla | Complessità principale |
|---|---|---|
| List | Sequenze ordinate, iterazioni, slicing | Ricerca O(n), Append O(1) |
| Tuple | Sequenze immutabili, dati costanti | Ricerca O(n) |
| Set | Elementi unici, membership test veloce | Ricerca O(1), Inserimento/O(1) |
| Dictionary | Associare chiavi a valori, lookup rapido | Ricerca/O(1), Inserimento/O(1) |



import time
import matplotlib.pyplot as plt
# Range di elementi
sizes = [1000, 5000, 10000, 50000, 100000]
# Liste per salvare i tempi
list_times = []
tuple_times = []
set_times = []
dict_times = []
for n in sizes:
# Creiamo le strutture dati
lista = list(range(n))
tupla = tuple(range(n))
insieme = set(range(n))
dizionario = {i: None for i in range(n)}
# Elemento da cercare (l'ultimo)
target = n - 1
# Lista
start = time.time()
target in lista
list_times.append(time.time() - start)
# Tupla
start = time.time()
target in tupla
tuple_times.append(time.time() - start)
# Set
start = time.time()
target in insieme
set_times.append(time.time() - start)
# Dictionary (chiavi)
start = time.time()
target in dizionario
dict_times.append(time.time() - start)
# Grafico
plt.figure(figsize=(10,6))
plt.plot(sizes, list_times, marker='o', label='List')
plt.plot(sizes, tuple_times, marker='s', label='Tuple')
plt.plot(sizes, set_times, marker='^', label='Set')
plt.plot(sizes, dict_times, marker='x', label='Dictionary')
plt.xlabel("Number of items")
plt.ylabel("Time (seconds)")
plt.title("Time Performance: List, Tuple, Set, Dictionary")
plt.legend()
plt.grid(True)
plt.show()
import time
import matplotlib.pyplot as plt
# Range di elementi
sizes = [1000, 5000, 10000, 50000, 100000]
# Liste per salvare i tempi
list_times = []
tuple_times = []
set_times = []
dict_times = []
for n in sizes:
# Creiamo le strutture dati
lista = list(range(n))
tupla = tuple(range(n))
insieme = set(range(n))
dizionario = {i: None for i in range(n)}
# Elemento da cercare (ultimo elemento)
target = n - 1
# Misuriamo il tempo di ricerca
start = time.time(); target in lista; list_times.append(time.time() - start)
start = time.time(); target in tupla; tuple_times.append(time.time() - start)
start = time.time(); target in insieme; set_times.append(time.time() - start)
start = time.time(); target in dizionario; dict_times.append(time.time() - start)
# Grafico ricerca
plt.figure(figsize=(10,6))
plt.plot(sizes, list_times, marker='o', label='List')
plt.plot(sizes, tuple_times, marker='s', label='Tuple')
plt.plot(sizes, set_times, marker='^', label='Set')
plt.plot(sizes, dict_times, marker='x', label='Dictionary')
plt.xlabel("Number of items")
plt.ylabel("Time (seconds)")
plt.title("Time Performance - Ricerca in List, Tuple, Set, Dictionary")
plt.legend()
plt.grid(True)
plt.show()
import time
import matplotlib.pyplot as plt
sizes = [1000, 5000, 10000, 50000, 100000]
list_times = []
tuple_times = []
set_times = []
dict_times = []
for n in sizes:
# Creiamo le strutture dati
lista = list(range(n))
tupla = tuple(range(n))
insieme = set(range(n))
dizionario = {i: None for i in range(n)}
target = n - 1
# List - remove
start = time.time()
lista.remove(target)
list_times.append(time.time() - start)
# Tuple non modificabile → rimozione = creazione nuova tupla senza l'elemento
start = time.time()
tupla = tuple(x for x in tupla if x != target)
tuple_times.append(time.time() - start)
# Set - remove
start = time.time()
insieme.remove(target)
set_times.append(time.time() - start)
# Dictionary - remove chiave
start = time.time()
del dizionario[target]
dict_times.append(time.time() - start)
# Grafico rimozione
plt.figure(figsize=(10,6))
plt.plot(sizes, list_times, marker='o', label='List')
plt.plot(sizes, tuple_times, marker='s', label='Tuple')
plt.plot(sizes, set_times, marker='^', label='Set')
plt.plot(sizes, dict_times, marker='x', label='Dictionary')
plt.xlabel("Number of items")
plt.ylabel("Time (seconds)")
plt.title("Time Performance - Rimozione in List, Tuple, Set, Dictionary")
plt.legend()
plt.grid(True)
plt.show()
1) Quale collezione non permette duplicati?
2) Quale collezione è immutabile?
3) Come si accede al valore di una chiave in un dizionario?
4) Quale struttura mantiene l'ordine degli elementi e permette modifiche?
5) Quale metodo permette di unire due set?