vuoi
o PayPal
tutte le volte che vuoi
SET
● I Set sono variabili vettore che includono un insieme di elementi non ordinati (= non
indicizzate) e privi di duplicati. Un set viene definito come un elenco di elementi
separato dalla virgola e delimitato dalle parentesi graffe. Sono mutabili.
● In un insieme il numero 1 e 0 sono considerati equivalenti a True e False e pertanto
semplificati con una singola istanza (stampati una volta). In un insieme la stringa '1' e
'True' non vengono considerate equivalenti alla costante booleana True. Analogamente
'0' e 'False' non vengono considerate equivalenti a False !!
● OPERATORI:
1) In →
2) Set ci permette di convertire una stringa in un insieme. Tale funzione
applicata alle stringhe genera un insieme composto dalle lettere di quella
stringa senza ripetizioni
3) Gli elementi di un set devono essere hashable. (Quando l'elemento inserito
nell'insieme non risulta hashable avremo l'eccezione TypeError: unhashable type)
Un oggetto hashable è un qualsiasi oggetto che ha un identificatore univoco (un
intero, detto hash value) che non cambia mai durante tutta l'esecuzione di un
programma. Due oggetti hashable che risultano uguali devono avere lo stesso valore
hash.
In generale gli oggetti mutabili (liste, dizionari, bytearray, insiemi, classi definite
dall'utente) NON sono hashable ad eccezione delle classi definite dall'utente.
Gli oggetti immutabili sono invece hashable
● METODI DEI SET
1) METODI DI INSIEMISTICA MATEMATICA
→
- SetA.union (setB, ...) effettua l'unione tra 2 insiemi. Eventuali elementi comuni ai
2 insiemi appariranno nell'insieme risultante senza duplicati. In alternativa si può
utilizzare l'operatore |. Il metodo accetta anche più insiemi.
→
- SetA.intersection (setB, ...) effettua l'intersezione tra 2 insiemi. Solo gli
elementi comuni ai 2 insiemi appariranno nell'insieme risultante senza duplicati. In
alternativa si può utilizzare l'operatore &. Il metodo accetta anche più insiemi.
→
- SetA.difference (setB, ...) effettua la differenza tra N insiemi ovvero restituisce
un insieme composto dagli elementi del primo esclusi quelli che sono presenti come
argomenti. In alternativa si può utilizzare l'operatore -. L'operazione non è commutativa
ovvero se A e B sono 2 insiemi differenti gli insiemi differenza A-B ed B-A non sono
identici. →
- SetA.symmetric_difference(setB) effettua l'operazione di XOR tra 2 insiemi
ovvero restituisce l'insieme composto dagli elementi non presenti in entrambe gli
insiemi. Non ammette più di un argomento. In alternativa si può utilizzare l'operatore
commutativo ^
2) METODI DI RIMOZIONE DI ELEMENTI
→
- .pop ( ) elimina un elemento a caso dall'insieme e lo restituisce. Il metodo non
richiede alcun parametro
→
- .remove (item) elimina l'elemento indicato come parametro dall'insieme. Qualora
l'elemento da rimuovere non esista verrà sollevata l'eccezione: KeyError. Il metodo non
restituisce alcun valore (tipo None!).
→
- .discard (item) elimina l'elemento passato come parametro dall'insieme indicato,
Qualora l'elemento da rimuovere non esista non verrà sollevata alcuna eccezione
(contrariamente a remove()!). Il metodo non restituisce alcun valore (tipo None!).
→
- .clear ( ) Svuota completamente il contenuto del set trasformandolo in una
insieme vuoto { }. Non restituisce nulla (tipo None!).
3) METODI DI AGGIUNTA
→
- .add (item) aggiunge l'elemento passato come parametro all'insieme indicato.
Qualora l'elemento da aggiungere esista non verrà aggiunto nulla e non verrà sollevata
alcuna eccezione! Il metodo non restituisce alcun valore (tipo None!)
4) METODI DI COPIA
→
- .copy() Alloca e restituisce l'indirizzo di memoria contenente un duplicato
dell'insieme originale
ATTENZIONE!
L'istruzione setD=setO.copy( ) NON è equivalente a setD=setO
- la 1° istruzione ricopia il contenuto del set originale setO in una nuova zona di
memoria che verrà puntata dalla variabile setD
- la 2° istruzione assegna l'indirizzo dell'area di memoria contenente l'insieme
originale setO alla variabile setD. Pertanto setD e setO puntano alla
stessa zona di memoria.
5) METODI DI VERIFICA
➔ NB: .isdisjoint (iterabile) restituisce vero se l'insieme setA non ha elementi in
comune con l'iterabile
➔ Il metodo accetta un solo argomento. Qualsiasi iterabile va bene poiché il
metodo prima di trattare l'argomento lo trasforma in un set
(slide 15 su frozenset da leggere)
● DICT
● I dizionari sono un array associativo, una struttura dati di tipo built-in, mutabile e
ordinato che memorizza il valore in coppie . Una volta creato il dizionario e valorizzato
si può usare la chiave (che deve essere univoca!) per ottenere il valore associato
I dizionari vengono definiti elencando tra parentesi graffe { } gli elementi separati da
virgole. Ogni elemento è formato da una chiave e un valore separati dai due punti
Un dizionario vuoto può essere creato usando al metodo costruttore dict( ) oppure
adoperando le parentesi graffe, senza nessun elemento all'interno
● Una volta creato un dizionario, è possibile ottenere il valore associato ad una chiave
usando la sintassi dizionario[chiave]. Qualora la chiave fosse una stringa si rammenta
che l'associazione è case sensitive ovvero la seguente istruzione solleva l'errore
KeyError.
→ I valori in un dict possono essere di qualsiasi tipo di dato e possono essere
duplicati, mentre le chiavi non possono essere ripetute e devono essere hashable
(int, string, bool, tuple, frozenset)
Perciò: No Errori
(leggi slide 6, parte teorica su hash tabe)
● OPERATORI
1) →
Key in dictionary L'operatore in restituisce True se la chiave Key è presente
all'interno del dizionario
L'operatore di slicing non è applicabile ai dizionari poiché non si tratta di un oggetto
hashable!! →
2) del ( Dizionario [Key1] ,... ) Essendo un tipo mutabile possiamo applicare
l'istruzione del che permette di rimuovere uno o più elementi dal dizionario. L'istruzione
del può accettare anche più argomenti, separati dalla virgola.
→
3) dict (iterabile) permette di convertire il suo argomento in un dizionario
- dict() senza argomenti restituisce un dizionario vuoto { }
- dict nel caso l'argomento sia un iterabile i cui elementi sono coppie usa il primo
elemento per la chiave e il secondo per il valore
→
4) len (dizionario) restituisce il numero di elementi contenuti nel dizionario
● METODI →
1) .items( ) restituisce una lista di tuple contenenti ciascuna la coppia chiave:valore
L'oggetto restituito da dict.items() è un oggetto vista, fornisce una vista
dinamica sugli elementi del dizionario, il che significa che quando il
dizionario cambia, la vista riflette questi cambiamenti
→
2) .keys( ) restituisce una vista dict_keys inizializzata con la lista delle chiavi del
nostro dizionario. (oggetto vista)
→
3) .values( ) restituisce una vista dict_values inizializzata con la lista dei valori nel
dizionario. (oggetto vista)
→
4) .get ( Key, DefValue ) restituisce il valore della chiave specificata. Il 2°
parametro DefValue (facoltativo!) viene restituito quando la chiave Key non venga
trovata. Per impostazione predefinita, è None.
→
5) .pop ( Key, DefValue ) rimuove l'elemento con chiave Key e restituisce il valore
associato. Se la chiave Key non esiste nel dizionario il metodo restituisce, se
specificato, il 2° argomento DefValue altrimenti genera un KeyError
→
6) .popitem( ) rimuove l'ultimo elemento del dizionario restituendolo sotto forma di
tupla contenente la coppia →
7) .setdefault ( Key, DefValue ) restituisce il valore associato a key nel dizionario.
Se la chiave non viene trovata la aggiunge associandola al valore DefValue. Se il
parametro DefValue non è specificato, il valore viene impostato a None.
→
8) .clear ( ) svuota il contenuto del dizionario. Restituisce None.
→
9) .copy( ) restituisce un duplicato in memoria del dizionario
- quando un dizionario viene copiato tramite il metodo copy(), qualsiasi modifica
apportata a quello copiato non si rifletterà nel dizionario originale e viceversa.
- quando invece si utilizza l'operatore di assegnamento = per copiare un
dizionario, qualsiasi modifica apportata a quello copiato si rifletterà nel
dizionario originale e viceversa
→
10) .update (IterCoppie) accoda a dizionario le coppie chiave:valore
dell'iterabile IterCoppie passato come 2° argomento. Il 2° argomento può essere un
dizionario o un qualsiasi argomento accettato dal metodo costruttore dict()
(sostanzialmente un iterabile composto da coppie chiave-valore). Restituisce None.
Riassunto metodi dict
ITERABILI e ITERATORI
● Un iterabile è un oggetto su cui posso eseguire un iterazione, ad esempio con l'aiuto
di un ciclo for. Esempi di oggetti iterabili sono le collezioni di dati come: liste, tuple,
insiemi, dizionari, stringhe.
Es: scorrimento Dizionario
a) Posso estrarre le chiavi
contenute in un dict
b) Posso estrarre solo i valori
utilizzando il metodo .values()
c) Posso estrarre entrambi
sia chiave che valore con
metodo .items()
● La definizione rigorosa dice che un oggetto è "iterabile" se possiede un metodo
__iter__( ) che restituisce un "iteratore".
→ uso la funzione hasattr() che permette di valutare se uno specifico oggetto
possiede un determinato attributo o metodo
→ usando dir() che mostra tutti i metodi di un oggetto
→ posso usare metodo iter <iterator>
Perciò:
Un oggetto si dice "iteratore" se è iterabile (quindi possiede il metodo __iter__() !) ed è
dotato anche di un metodo __next__().
NB: Pertanto un iteratore è anche un oggetto iterabile, non è detto che valga anche il
viceversa!!
* Il metodo __iter__() è il metodo che restituisce un iterabile quindi un iteratore
* Il metodo __next__() è il metodo che restituisce l'elemento successivo alla
posizione corrente all'interno del contenitore. Se gli elementi da iterare sono stati
già restituiti tutti allora il metodo solleva l'eccezione "StopIteration" che ferma
l'iterazione
● Le collezioni di dati liste, tuple, insiemi, dizionari, stringhe NON sono iteratori, infatti
NON possiedono il metodo __next__().
In alcuni casi la conversione di un oggetto iterabile in un iteratore è AUTOMATI