Jump to content
  • #2 Introduzione a Python: Tipi di dato Sequenza, Liste, Pile, Code, Tuple, Range


     Share

    Dopo l'introduzione di Python nella prima lezione, ora proseguiamo con la lezione due e vediamo i tipi di dato.

     

    Tipi Sequenza

    Stringhe

    Liste

    Tuple

    Buffer

    oggetti range

     

    Liste

    Le liste sono sequenze mutabili, utilizzate per archiviare raccolte di oggetti (non per forza dello stesso tipo)

     - [1, 2, 3] è una lista

     - ['Pippo', True, 3] è una lista

    Una lista è una sequenza di oggetti ordinati

    Gli oggetti possono essere di qualsiasi tipo

    I valori sono detti elementi

    Gli elementi della lista sono racchiusi tra parentesi quadrate, e separati da virgole.

    [1,3,5,7,11,13]			lista numeri interi
    ["Laura","Luca"]		lista stringhe
    ["Laura",15,2.5,True]	lista eterogenea
    []						lista vuota
    [3,[6,9,12]]			lista contenente lista
    a=[1,3,7,9]				variabile a contiene lista

     

    L'elemento in posizione pos di una lista si indica con [pos]

    Le posizioni si chiamano anche indici a[2]

    La prima posizione è la posizione 0: a[0]

    Se cerchiamo di accedere ad una posizione fuori dalla lista viene segnalato un errore a[90]

    Per stampare una lista intera:  print(a)

    Con indice negativo si parte dal fondo. [-1]

    La lista vuota è valutata False

     

    Le liste sono mutabili (possono cambiare, aggiungere e cancellare/modificare elementi)

     

    Operazioni

    len() restituisce la lunghezza della lista

    + concatena due liste

    * int ripete la lista un certo numero di volte

    [ : ] estrae una porzione da una lista

    in verifica l'appartenenza di un elemento a una lista

    lista=['x','y','z']
    lista[0]= 42
    print(lista) 	stampa: [42,'y','z']
    lista[1:1]=[5]
    print(lista) 	stampa: [42,5,'y','z']
    lista[2:3]=[]
    print(lista) 	stampa: [42,5,'z']
      #slice operator
    >>>mylista=["A","B","C",23,["A"]]
    >>>mylista[:]
    ["A","B","C",23,["A"]]
    >>>mylista[2:]
    ["C",23,["A"]]
    >>>mylista[:5]
    ["A","B","C",23,["A"]]
    >>>mylista[1:2]
    ["B"]

     

    Aggiungere un elemento

    In una lista, l'assegnazione di un valore ad un indice fuori dimensione genera un errore (si deve usare append)

    >>>L = ["a","b","c"]
    >>>L[3]="d"
    #errore
    
    >>>L.append("d")	ok!
    
    lista.append(elem)		aggiunge elem alla fine della lista
    lista.remove(elem)		trova e rimuove elem dalla lista;
    lista.pop()			rimuove e restituisce l'ultimo elemento della lista
    lista.clear()			rimuove tutti gli elementi della lista
    
    del lista[-2]			cancellare un elemento come pop
    del lista				cancella la variabile lista

     

    Se assegniamo ad una variabile una variabile che contiene una lista, le due variabili indicano proprio la stessa lista b=a

     - se modifico l'una anche l'altra viene modificata

    per fare una copia senza "unificare" le liste, possiamo copiarne il contenuto c=a[:]

     

    Pila (stack)

    I metodi delle liste rendono molto semplice l'uso di una lista come una pila, in cui l'ultimo elemento aggiunto è il primo elemento recuperato (last in, first out)

    Per aggiungere un oggetto in cima alla pila: append(i)

    Per recuperare un oggetto dalla cima della pila: pop()

    >>> stack = [3,4,5]
    >>> stack.append(6)
    >>> stack.append(7)
    >>> stack
    [3,4,5,6,7]
    >>> stack.pop()
    7
    >>> stack
    [3,4,5,6]
    >>> stack.pop()
    6
    >>> stack
    [3,4,5]

     

    Coda (queue)

    E' anche possibile utilizzare una lista come una coda (first in, first out)

    Tuttavia, le liste non sono efficienti per questo scopo.

    append/pop sono veloci perchè aggiungono un elemento alla fine della lista.

    Ma per le code occorre fare inserimenti o rimozioni all'inizio della lista.

    Per implementare una coda: collections.deque, append e pop veloci da entrambe le estremità.

    >>> from collections import deque
    >>> queue = deque(["Eric","John","Micheal"])
    >>> queue.append("Terry")
    >>> queue.append("Graham")
    >>> queue.popleft()
    'Eric'
    >>> queue.popleft()
    'John'
    >>> queue
    deque(["Micheal","Terry","Graham"])

     

    List Comprehension

     

    La lista comprehension permette di trasformare e/o filtrare una lista, è una scrittura elegante e compatta.

    Data una lista qualungue lista_originale, posso creare una nuova lista che contiene solo gli elementi che soddisfano una certa condizione:

    lista_filtrata = [elemento
    		for elemento in lista_originale
    		if condizione(elemento)]
    #esempio
    numeri=range(10)
    numeri_pari = [n for n in numeri
                   if n%2==0]
    print(numeri_pari)

     

    Tuple

    I tuple sono anche essi degli elenchi di valori indicizzati

    Sono sequenze immutabili (una volta creati sono immutabili), una lista di valori separati da virgola, i valori sono scritti tra parentesi tonde ()

    1,2,3 è una tupla
    (1,2,3) è una tupla
    a=(1,2,3) -> a[0] è 1

    Tale immutabilità non si applica ai contenuti della tupla, per cui i suoi oggetti possono essere modificati se mutabili

    t=(12, 'abc', [1,2,3,4])
    >>> t[1][2]='d'

    Creare una Tupla con il metodo built-in tuple()

    >>> t = tuple()
    >>> print t
    ()

    Se l'argomento è una sequenza (stringa, lista o tupla) il risultato è una tupla con gli elementi della sequenza:

    >>> t = tuple('lupins')
    >>> print t
    ('l','u','p','i','n','s')

     

    Unpacking Arguments (funziona anche con le liste)

    a=(1,2)
    x,y=a
    print(x) -> 1
    print(y) -> 2

    Tuple con un singolo elemento occorre aggiungere una virgola finale

    La virgola è necessaria altrimenti Python tratterebbe la singola tupla come una stringa qualunque

    Operazioni

    len() lunghezza della tupla

    + concatenazione di due tuple

    .count() conteggio di un elemento

    [:] slice operator

    list() conversione da tuple a lista

     

    Range

    Range rappresenta una sequenza immutabile di numeri ed è comunemente usato nei circli for per eseguire il codice del ciclo per un certo (specifico) numero di volte.

    range(10)		fino a (escluso)
    range(0,10)		da (incluso)
    range(0,55,5)	passo
    for i in range(11): print(i)
    #tabellina_del_cinqui=range(0,55,5)

    Il vantaggio del range rispetto ad una lista è che un oggetto di tipo range occupa sempre la stessa quantità di memoria, indipendentemente dalla dimensione dell'intervallo che rappresenta, memorizza solo i valori di inizio, arresto e passo; calcola i singoli item solo quando è necessario; se non devo lavorare su una determinata lista ma mi serve ciclare su una sequenza a caso è meglio usare range.

     

    Stringhe

    In Python è possibile accedere agli elementi di una sequenza usando la sintassi sequenza[indice], questo restituirà l'elemento in posizione indice. Il primo elemento ha sempre indice 0.

    >>> s = 'Python'
    >>> s[0]		#elem in posizione 0
    'P'
    >>> s[2]		#elem in posizione 2
    't'
    >>> s[-1]		#elem in posizione -1
    'n'
    #slicing
    >>> s[0:2]
    'Py'
    >>> s[4:]
    'on'
    #contenimento
    >>> 'P' in s
    True
    >>> 'x' in s
    False

    La funzione built-in len() può essere usata per ottenere il numero di elementi in una sequenza

    >>> len('Python')
    6

     

    Metodi list(), tuple()

    Il metodo list() prende sequence types e li converte a lista

    >>> my_tuple=1,3,4,5
    >>> my_list=list(my_tuple)
    >>> print(my_list)
    [1,3,4,5]
    >>> my_string="Pippo"
    >>> my_list=list(my_string)
    >>> print(my_list)
    ['P','i','p','p','o']
    >>> my_tuple=tuple(my_list)
    >>> print(my_tuple)
    (,'P','i','p','p','o')

     

    Mapping types (dizionario)

    I mapping sono oggetti mutabili, al momento esiste solo un tipo di mappatura standard, il dizionario.

    Una mappatura tra un insieme di chiavi e un insieme di valori. Ogni chiave (key) è mappata su un valore (value)

    L'associazione di una chiave e un valore viene chiamata coppia chiave-valore (key-value)

    I dizionari (dict) sono un tipo built-in, mutabile e non ordinato che contiene elementi (items) formati da chiave e valore

    I dizionari vengono definiti, elencando tra parentesi graffe {}

    Una serie di elementi separati da virgole, dove ogni elemento è formato da una chiave e un valore separati da due punti :

    Dizionario vuoto è False

     

    A differenza delle liste se si assegna un valore ad una chiave non presente, la coppia chiave:valore viene aggiunta al dizionario

    Per inserire un nuovo elemento (chiave-valore) nel dizionario my_dict:

    my_dict['Pippo']=23 #chiave Pippo e valore 23
    >>> print(my_dict)
    {'Pippo':23}

     

    Metodi:

    keys() elenco contenente le chiavi del dizionario

    values() elenco di tutti i valori nel dizionario

    items() elenco contenente una tupla per ciascuna coppia di valori chiave

    len() numero di coppie chiave-valore

    >>> d={"a":0, "b":1}
    >>> d.items()
    dict_items([('a',0),('b',1)])
    >>> type(d.items())
    <class 'dict_items'>
    
    >>> t=tuple(d.items())
    >>> t
    (('a',0),('b',1))

    get() valore della chiave specificata

    update() aggiorna il dizionario con le coppie chiave-valore specificate

    pop() rimuove elemento con chiave specificata

    popitem() rimuove ultima coppia chiave-valore

    clear() rimuove tutti elementi dal dizionario

     

    A differenza delle sequenze, che sono oggetti iterabili che supportano l'accesso agli elementi mediante indici interi, i dizionari sono indicizzati da chiavi

    >>> a_dict={'color':'blue','fruit':'apple','pet':'dog'}
    >>> for key in a_dict:
      		print(key)
    color
    fruit
    pet

    Per iterare: .items(), .keys(), .values()

     

    Una funzione hash è una funzione che prende un valore (di qualsiasi tipo) e ritorna un intero.

    I dizionari usato questi interi, chiamati hash values, per salvare e ricercare le coppie key-value

    Le chiavi (keys) devono essere di tipo 'hashable': il valore hash non può cambiare mai

    Una lista può essere un valore(value) di un dizionario

    {1: ['a','p','t','o'], 2:['r']}

    Le chiavi devono essere immutabili

     

    Dict Comprehension

    dictionary = {key:value for vars in iterable}
    #esempio
    original_dict={'Jack':38,'micheal':48,'guido':57,'john',33}
    even_dict={k:v for (k,v) in original_dict.items() if v%2==0}
    print(even_dict)

     

     

     Share


    User Feedback

    Recommended Comments

    There are no comments to display.


×
×
  • Create New...

Important Information

Terms of Use Privacy Policy Guidelines We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.