Python (data structures)
Loriano Storchi
loriano@storchi.org
http:://www.storchi.org/
Data structures
●
Le strutture dati consentono di organizzare i dati in modo da rendere più efficiente il loro utilizzo e la loro gestione
●
Vedremo in particolare stringhe, liste, tuple, dizionari e
insiemi. Solo le basi minime utili per svolgere esercizi di
base
NUMERI COMPLESSI
Complex numbers
●
Un numero complesso è un numero che può essere
espresso nella forma a + ib, dove aeb sono numeri reali e i
è una soluzione dell'equazione x
2= −1. Poiché nessun
numero reale soddisfa questa equazione, i è chiamato
numero immaginario.
Complex numbers
●
I numeri complessi sono intrinsecamente definiti in python
Complex numbers
●
la funzione type () viene utilizzata principalmente per scopi
di debug. Se viene passato il tipo di argomento singolo
(obj), restituisce il tipo dell’oggetto specificato.
Digressione OOP e classi
OOP
●
Object-oriented programming (OOP) è un paradigma di programmazione basato sul concetto di "oggetti", che possono contenere dati, sotto forma di campi (spesso noti come attributi o proprietà), e codice, sotto forma di procedure (spesso noti come metodi). (Wikipedia)
●
I linguaggi OOP più utilizzati sono basati sul concetto classe.
–
Python è multi-paradigma e supporta OOP
–
Una classe specifica un nuovo tipo, all'interno di una
classe sono presenti elementi di dati e metodi
OOP
OOP
STRINGS
Strings
●
Una string e’ una sequenza di caratteri, in python ci sono diversi metodi / operazioni utili per la manipolazione di stringhe, una stringa in generale può essere vista come un array di caratteri
●
Operazioni tra stringhe
Strings
●
Estrarre sottostringhe, le stringhe sono vettri di caratteri
Strings : delimiter
●
: è il delimitatore che serve a "suddividere" I sottoinsiemi nelle sequenze, [inizio: fine]
●
[1: 5] è equivalente a "da 1 a 5" (5 non incluso)
●
[1:] è equivalente a "1 alla fine"
●
[: -2] da "inizio a -2" -2 non incluso
Strings
●
Estrarre sub-strings, strings sono array di caratteri
Strings
●
La classe string ha diversi methodi
●
find() Determina se la string str e’ presente, restituisce
l'indice iniziale.
Strings
●
split() restituisce un elenco di stringhe dopo aver
suddiviso la stringa usando il separatore specificato..
LISTS
Lists
●
List è una collezione ordinata e modificabile. Consente
membri duplicati.
Lists
●
Lists sono sequenze ordinate di oggetti, molte operazioni
di base sono in comune con le stringhe
Lists
●
Lists sono sequenze ordinate di oggetti, molte operazioni
di base sono in comune con le stringhe
Lists
●
Lists sono sequenze ordinate di oggetti, molte operazioni
di base sono in comune con le stringhe. Ma nel caso delle
stringhe non posso assegnare un elemento
Lists
●
Lists hanno molti metodi vedremo solo i più importanti
–
list.append(elem) -- aggiunge un singolo elemento alla fine della lista.
–
list.insert(index, elem) -- inserisce l'elemento in
corrispondenza dell'indice dato, spostando gli elementi a destra.
–
list.extend(list2) aggiunge gli elementi di list2 alla fine
della lista.
Lists
●
Lists aggiungere elementi
Lists
●
Lists aggiungere elementi
Lists
●
Lists aggiungere elementi
Lists
●
Rimuovere elementi da una lista
–
remove rimuove il primo valore corrispondente
Lists
●
Rimuovere elementi da una lista
–
del rimuove un elemento all’indice specificato
Lists
●
Rimuovere elementi da una lista
–
pop rimuove l'elemento in corrispondenza di un indice
specifico e lo restituisce
Lists
●
Il metodo sort
TUPLES
Tuples
●
Le tuple Python sono molto simili alle liste ma la loro
manipolazione è più veloce dato che sono "immutable"
Tuples
●
Ma non posso modificare un valore
But...
●
Ma un dato elemento di una tupla puo’ essere mutabile, e
quindi:
DICTIONARY
Dictionary
●
A dictionary e’ una sequenza di valori, ed ogni nelemeto e’
una coppia key : value. Le chiavi sono uniche e i dizionari
vengono creati utilizzando {
Dictionary
●
Possiamo controllare se una chiave e’ presente o
meno
Dictionary
●
Possiamo anche controllare se un valore e’ presente
Dictionary
- dict.items() restituisce una lista di tuples
Dizionari
Dizionari
●
clear(): rimuove tutti gli elementi
●
pop(): rimuove e restituisce il valore corrispondete alla chiave
●
del L'istruzione rimuove l'elemento specificato dal
dizionario. Se la chiave fornita non è presente nel
dizionario KeyError.
PYTHON MEMORY
MANAGEMENT
Reference
●
Quando dichiaro una variabile chiedo una certa quantità di memoria
●
In python, l'operazione di assegnazione manipola i
riferimenti, quindi x = y non crea una copia dei dati
contenuti in y, ma crea semplicemente un riferimento a y,
ovvero x punterà a y
Reference
●
Quando scrivo x = 4 allochiamo lo spazio di memoria
necessario per contenere l'intero 4 e poi "memorizzo
l'indirizzo della" (creo il riferimento alla) locazione di
memoria in x
Reference
● Cosa succede veramente quando si incrementa x?
– L'interprete recupera il valore contenuto nell'indirizzo di memoria a cui si riferisce x
– Il risultato dell'operazione 3 + 1 viene calcolato e il risultato viene memorizzato in una nuova posizione di memoria
– Si modifica il riferimento in x, x ora farà riferimento al nuovo indirizzo in memoria in cui è memorizzato il valore 4
– Python ha un garbage collector che libera tutta la memoria allocata quando non ci sono più variabili (nomi) che fanno riferimento alle aree di memoria in questione
–
ESWERCIZIO MOLTIPLICAZIONE
MATRICI
Matrix
●
Posso utilizzare una lista di liste per memorizzare una
matrice in modo semplice
Matrix multiplication
Il prodotto è definito solo
per matrici con dimensioni
compatibili
Moltiplicazione matrice matrice
Exercise
●
Scrivi un programma che, dati due array 3x3 riempiti con numeri casuali, calcoli e stampi il risultato della
moltiplicazione di matrici
Matrix multiplication simple algorithm
● Input: matrices A and B
● Let C be a new matrix of the appropriate size
● For i from 0 to n-1:
● For j from 0 to p-1:
● Let sum = 0
● For k from 0 to m-1:
● Set sum = sum + Aik × Bkj
● Set Cij = sum
● Return C
ESEMPIO MONTECARLO
Monte Carlo methods
● Nelle reazioni nucleari, una particella veloce colpisce il nucleo di un atomo. Questo si frantuma in molte particelle, che colpiscono i nuclei di altri atomi vicini, che si frantumano a loro volta, secondo una reazione a catena, durante la quale viene rilasciata una grande quantità di energia. Il processo durerà fino a coinvolgere l'intero universo o si fermerà dopo un certo numero di reazioni?
● Il metodo Monte Carlo consiste nel cercare la soluzione di un problema, rappresentandolo come un parametro di una popolazione ipotetica e nella stima di questo parametro esaminando un campione della popolazione ottenuto tramite sequenze di numeri casuali
Compute PI using MC methos
MONTECARLO E CALCOLO
DEGLI INTEGRALIL
Exercise
●
Stima del segueunte integrale:
∫
2 5sin( x)dx=cos(2)−cos(5)=−0,69981
Exercise
● Set rect_count to 0 , xmin to 2.0, xmax to 5.0 , ymin to -1.0 and ymax to 1.0
● for i from 0 to N :
● Generate x random between xmin and xmax
● Generate y random between ymin and ymax
● if sin(x) > 0.0 and (y <= sin(x) and (y >= 0.0):
● rect_count = rect_count + 1
● else if sin(x) < 0.0 and y >= sin(x) and y <= 0.0
● rect_count = rect_count – 1
● integral is equal to (xmax - xmin) * (ymax - ymin) * (rect_count / N)
∫
2 5sin()dx=cos(2)−cos (5)=−0,69981
Vediamo un primo
esempio di utilizzo di numpy e matplotlib
ESERCIZIO
Exercise
●