Sostieni AppuntiFacili con una piccola donazione su PayPal

Dona con PayPal
AppuntiFacili
Torna Indietro Segnala errore

Confronto tra List, Tuple, Set e Dizionari

✍️ Dennis Turco 🏷️ Informatica 📘 Python
Ultima modifica:
#python#programmazione#collezioni#list#tuple#set#dictionary

1. Introduzione

Python offre diverse strutture dati per gestire collezioni di elementi:

  • List: sequenze ordinate e modificabili.
  • Tuple: sequenze ordinate e immutabili.
  • Set: insiemi non ordinati di elementi unici.
  • Dictionary: collezioni di coppie chiave-valore.

In questa lezione confronteremo le caratteristiche principali di ciascuna.

2. Caratteristiche principali

TipoOrdinamentoModificabileElementi duplicatiAccesso
ListIndice
TupleNoIndice
SetNoNoNon indicizzato
DictionaryNo (chiavi)Valori: sì; Chiavi: noChiave

3. Operazioni comuni

  • List: append(), remove(), pop(), slicing, concatenazione
  • Tuple: immutabile, slicing, concatenazione crea nuova tuple
  • Set: add(), remove(), union(), intersection(), difference()
  • Dictionary: get(), keys(), values(), items(), pop()

4. Quando usare cosa

StrutturaQuando usarlaComplessità principale
ListSequenze ordinate, iterazioni, slicingRicerca O(n), Append O(1)
TupleSequenze immutabili, dati costantiRicerca O(n)
SetElementi unici, membership test veloceRicerca O(1), Inserimento/O(1)
DictionaryAssociare chiavi a valori, lookup rapidoRicerca/O(1), Inserimento/O(1)

5. Performance

confronto lettura

confronto ricerca

confronto rimozione

5.1 Codice per la creazione del grafico del confronto LETTURA

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()

5.2 Codice per la creazione del grafico del confronto per la RICERCA

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()

5.3 Codice per la creazione del grafico del confronto per la RIMOZIONE

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()

6. Quiz a risposta multipla

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?

Prenota una lezione