Anteprima
Vedrai una selezione di 4 pagine su 14
Python - parte 3 Pag. 1 Python - parte 3 Pag. 2
Anteprima di 4 pagg. su 14.
Scarica il documento per vederlo tutto.
Python - parte 3 Pag. 6
Anteprima di 4 pagg. su 14.
Scarica il documento per vederlo tutto.
Python - parte 3 Pag. 11
1 su 14
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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

Dettagli
Publisher
A.A. 2023-2024
14 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Jas00704 di informazioni apprese con la frequenza delle lezioni di Fondamenti di programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Brescia o del prof Sechi Marco.