Insiemi e Tuple
Prima di procedere con set e tuple, è importante menzionare che i dizionari non verranno trattati qui.
Set
Un set offre una complessità temporale media O(1) per inserimenti, eliminazioni e ricerche, il che significa che queste operazioni vengono eseguite in tempo costante, indipendentemente dalla dimensione del set. Questo rende i set molto più veloci delle liste per il test di appartenenza e per operazioni come aggiunta o rimozione di elementi, dove le liste richiedono una complessità temporale O(n) (il tempo cresce linearmente con la dimensione della lista) nel caso peggiore.
Quando utilizzare:
- È necessario avere elementi unici, garantendo l'assenza di duplicati nella raccolta;
- È richiesto un test di appartenenza rapido, rendendo i set ideali per attività come la verifica dell'esistenza di un elemento;
- Si eseguono operazioni come unioni, intersezioni o differenze di set, che i set supportano con metodi ottimizzati;
- L'ordine non è rilevante, poiché i set sono intrinsecamente non ordinati e non è necessario mantenere l'ordine di inserimento.
1234567891011121314151617181920# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
Confrontiamo ora le prestazioni di un set rispetto a una lista nella verifica dell'appartenenza:
12345678910111213141516171819import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
Tupla
Le tuple sono tipicamente utilizzate quando è necessario garantire che i dati non possano essere modificati oppure come chiave in un dict o elemento in un set (poiché le tuple sono hashable).
-
Preferibili alle liste: quando è necessario avere dati immutabili, si desidera utilizzare la collezione come chiave di un dizionario o elemento di un set, oppure quando è richiesta una memorizzazione efficiente per una collezione di dimensione fissa;
-
Preferibili agli array NumPy: quando i dati sono non numerici o quando l'immutabilità è fondamentale. Mentre gli array NumPy sono progettati per calcoli numerici e sono mutabili per impostazione predefinita, le tuple offrono sicurezza per dati non numerici o piccole collezioni strutturate che devono rimanere costanti.
12345678# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
Poiché la lista students contiene record degli studenti (ID, nome, cognome) che devono essere sola lettura, è preferibile utilizzare tuple per ciascun record invece delle liste. Inoltre, come menzionato sopra, le tuple sono leggermente più efficienti in termini di memoria rispetto alle liste.
1. Quale dei seguenti scenari è più adatto all'utilizzo di un set invece di una lista?
2. Si dispone di un dataset con milioni di record e si deve verificare frequentemente se determinati valori sono presenti al suo interno. Quale struttura dati è la più efficiente per questo scopo?
3. Stai creando un record per ogni studente che include un ID univoco, nome e cognome. I dati non devono essere modificati una volta creati. Quale struttura dati sarebbe la più appropriata?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 7.69
Insiemi e Tuple
Scorri per mostrare il menu
Prima di procedere con set e tuple, è importante menzionare che i dizionari non verranno trattati qui.
Set
Un set offre una complessità temporale media O(1) per inserimenti, eliminazioni e ricerche, il che significa che queste operazioni vengono eseguite in tempo costante, indipendentemente dalla dimensione del set. Questo rende i set molto più veloci delle liste per il test di appartenenza e per operazioni come aggiunta o rimozione di elementi, dove le liste richiedono una complessità temporale O(n) (il tempo cresce linearmente con la dimensione della lista) nel caso peggiore.
Quando utilizzare:
- È necessario avere elementi unici, garantendo l'assenza di duplicati nella raccolta;
- È richiesto un test di appartenenza rapido, rendendo i set ideali per attività come la verifica dell'esistenza di un elemento;
- Si eseguono operazioni come unioni, intersezioni o differenze di set, che i set supportano con metodi ottimizzati;
- L'ordine non è rilevante, poiché i set sono intrinsecamente non ordinati e non è necessario mantenere l'ordine di inserimento.
1234567891011121314151617181920# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
Confrontiamo ora le prestazioni di un set rispetto a una lista nella verifica dell'appartenenza:
12345678910111213141516171819import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
Tupla
Le tuple sono tipicamente utilizzate quando è necessario garantire che i dati non possano essere modificati oppure come chiave in un dict o elemento in un set (poiché le tuple sono hashable).
-
Preferibili alle liste: quando è necessario avere dati immutabili, si desidera utilizzare la collezione come chiave di un dizionario o elemento di un set, oppure quando è richiesta una memorizzazione efficiente per una collezione di dimensione fissa;
-
Preferibili agli array NumPy: quando i dati sono non numerici o quando l'immutabilità è fondamentale. Mentre gli array NumPy sono progettati per calcoli numerici e sono mutabili per impostazione predefinita, le tuple offrono sicurezza per dati non numerici o piccole collezioni strutturate che devono rimanere costanti.
12345678# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
Poiché la lista students contiene record degli studenti (ID, nome, cognome) che devono essere sola lettura, è preferibile utilizzare tuple per ciascun record invece delle liste. Inoltre, come menzionato sopra, le tuple sono leggermente più efficienti in termini di memoria rispetto alle liste.
1. Quale dei seguenti scenari è più adatto all'utilizzo di un set invece di una lista?
2. Si dispone di un dataset con milioni di record e si deve verificare frequentemente se determinati valori sono presenti al suo interno. Quale struttura dati è la più efficiente per questo scopo?
3. Stai creando un record per ogni studente che include un ID univoco, nome e cognome. I dati non devono essere modificati una volta creati. Quale struttura dati sarebbe la più appropriata?
Grazie per i tuoi commenti!