Col·leccions

Les col·leccions són tipus de variables que poden emmagatzemar un conjunt de dades. Les col·leccions més importants són les llistes, les tuples i els diccionaris.

Llistes

Les llistes s’anomenen en altres llenguatges de programació array o vector, i són col·leccions ordenades de dades de qualsevol tipus: nombres, cadenes, booleans, i també altres llistes.

Una llista es crea entre claudàtors, separant els diferents valors amb comes:

llista_buida = []
vocals = ['a', 'e', 'i', 'o', 'u']
llista = [12, 34.5, 'Hola món', True, ['A', 'B', 'C']]

Cadascun dels elements en una llista es representa per un índex: La posició de l’element dins de la llista començant a comptar per 0. Per a accedir a una de les dades contingudes a la llista escriurem el nom de la llista i després l’index de l’element entre claudàtors.

Avís

Al primer element de la llista li correspon l’índex 0.

>>> v = llista[1]
>>> v
34.5
>>> b = llista[3]
>>> b
True

Per a accedir a una dada continguda dins d’una llista que es troba dins d’altra llista escriurem el nom de la primera llista i, entre claudàtors, l’índex que identifica la posició de la segona llista dins la primera, i després l’índex que identifica la posició de l’element que dessitgem recuperar dis la segona llista:

>>> t = llista[4][0]
>>> t
'A'

Altra possibilitat és accedir als elements de la llista utilitzant nombres negatius. L’element -1 de la llista serà l’últim, -2 el penúltim, i així successivament.

>>> b = llista[-2]
>>> b
True

Una possibilitat de Python que no existeix en altres llenguatges de programació és la possibilitat de agafar porcions d’una llista. Definirem aquestes porcions entre claudàtors indicant l’element d’inici i el de final separats per dos punts : (aquest últim no serà inclòs). Observa l’exemple següent:

>>> llista = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ]
>>> nova_llista = llista[3:6]
>>> nova_llista
[ 'd', 'e', 'f' ]

Una manera de visualitzar el motiu per el qual el primer element de la llista és l’element cero, i per què en un interval l’últim element no s’inclou és imaginar que els índex es situen davant dels elements.

_images/index_llista.png

Quan definim una porció d’una llista també podem afegir un tercer valor, que serà un «valor de pas». Aquest valor indicarà cada quants valors cal agafar-ne un de la llista. Observa el següent exemple, en el qual es prenen els elements entre el 0 i el 4 (no inclòs), però agafant solament un de cada dos:

>>> nova_llista = llista[0:4:2]
>>> nova_llista
[ 'a', 'c' ]

Podem ometre els valors d’inici i fi de l’interval, i en el seu lloc s’utilitzarà el principi i fi de la llista.

>>> llista[:4]
['a', 'b', 'c', 'd']
>>> llista[3:]
['d', 'e', 'f', 'g']
>>> llista[1::3]
[ 'b', 'e' ]

Aquest mecanisme pot ser útil per modificar el contingut d’una llista. Observa el següent exemple:

>>> llista = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ]
>>> llista2 = [ 'A', 'B', 'C' ]
>>> llista[0:3] = llista2
>>> llista
[ 'A', 'B', 'C', 'd', 'e', 'f', 'g' ]

Podem també modificar la grandària d’una llista, si l’element inserit té un nombre diferent d’elements:

>>> llista = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ]
>>> llista2 = [ 'A', 'B', 'C' ]
>>> llista[0:5] = llista2
>>> llista
[ 'A', 'B', 'C', 'f', 'g' ]
>>> llista[3:5] = 'D'
>>> llista
[ 'A', 'B', 'C', 'D' ]

L’operador + funciona amb les llistes igual que amb les cadenes de text, retornant una nova llista que és el resultat de concatenar dues.

>>> llista1 = ['a', 'b']
>>> llista1 = llista1 + ['c']
>>> llista1
['a', 'b', 'c']
>>> llista2 = [ 'd', 'e', 'f' ]
>>> llista3 = llista1 + llista2
>>> llista3
['a', 'b', 'c', 'd', 'e', 'f' ]

Mètodes de les llistes.

Tal i com varem explicar en un apartat anterior, Python és un llenguatge orientat a objectes. Tot en Python (les cadenes de text, les llistes, etcètera) són objectes i com a tals tenen mètodes que són funcions internes als objectes, i que possibiliten que podam donar ordres a un objecte en concret. A continuació tens una llista d’alguns dels mètodes associats a les llistes.

  • llista.append(x): Afegeix al final de la llista l’objecte x.

  • llista.reverse(): Inverteix l’ordre dels elements de la llista.

  • llista.sort(reverse=False): Ordena alfabèticament els elements de la llista. Amb el paràmetre reverse=True l’ordre serà invers.

  • llista.index(x): Retorna l’index de la primera trobada de l’objecte x en la llista. Si l’objecte x no es troba a la llista hi ha un error.

  • llista.insert(i, x): Insereix l’element x en la posició i, desplaçant els elements posteriors cap a la dreta.

  • llista.count(x): Retorna un int amb el nombre de vegades que podem trobar l’element x en la llista.

  • llista.remove(x): Elimina la primera aparició de l’element x de la llista.

  • llista.pop(): Retorna l’últim element de la llista i l’esborra.

http://pythontutor.com/visualize.html#code=vocals%20%3D%20%5B’e”,”u”%5D%0Avocals.append%28’a”%29%0Avocals.append%28’o”%29%0Avocals.reverse%28%29%0Avocals.sort%28%29%0AindexU%20%3D%20vocals.index%28’o”%29%0Avocals.insert%282,”i”%29%0Avocals.append%28’a”%29%0Avocals.append%28’a”%29%0AvegadesA%20%3D%20vocals.count%28’a”%29%0Avocals.remove%28’a”%29%0Avocals.remove%28’a”%29%0Avocals.sort%28%29%0Alletra%20%3D%20vocals.pop%28%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false

Tuples

Les tuples són molt semblants a les llistes, i es creen de manera similar, només que utilitzarem parèntesis en lloc de claudàtors:

t = ( 'a', 'b', 'c', 'd', 'e', 'f', 'g' )

Per obtenir un element de a tupla utilitzarem els claudators igual que ja feiem amb les llistes:

>>> var = t[3]
>>> var
'd'

La diferència entre les tuples i les llistes és que les primeres són immutables i de grandària fixa, de manera que una vegada creades no les podrem modificar. El seu avantatge és que consumeixen molta menys memòria que les llistes, així que si anem a crear una llista molt gran que no modificarem durant l’execució del programa hauríem de plantejar-nos la possibilitat d’utilitzar un tupla.

Per cert: les cadenes de text es comporten també com a tuples de manera que és possible fer el següent:

>>> text = 'Hola món.'
>>> text[3]
'a'
>>> text[-2]
'n'
>>> text[::3]
'Haó'

Diccionaris

Els diccionaris son col·leccions formades per elements dobles: una clau i un valor. De fet, per accedir a un determinat valor utilitzarem la seua clau i no un índex, ja que els elements no es troben ordenats.

Anem a veure açò amb un diccionari on desem les dades d’un usuari.

dic = {'nom':'Pau','cognoms':'Vidal Martí','mail':'pauvid@serv.com'}

Per accedir a un valor emmagatzemat al diccionari hem d’utilitzar la clau.

>>> dic['cognoms']
'Vidal Martí'

També podem tornar a assignar valors o introduir-ne de nous.

>>> dic['mail'] = 'pavi@hmail.com'
>>> dic['telèfon'] = '5551234'
>>> dic
{'mail': 'pavid@hmail.com', 'nom': 'Pau', 'telèfon': '5551234', 'cognoms': 'Vidal Martí'}