Capítol 8 — Llistes
Capítol 8

Llistes

Una llista guarda diversos valors en una sola variable, en ordre.

Crear una llista

Fins ara cada variable guardava un sol valor. Una llista (en anglès, list) pot guardar-ne molts, separats per comes i entre claudàtors [ ]:

Una llista pot contenir valors de qualsevol tipus: enters, decimals, textos, o fins i tot una barreja. També pot estar buida:

Prova a crear la teva pròpia llista i mostra-la:

Accedir a elements: indexació i len()

Els elements d'una llista s'indexen exactament igual que els caràcters d'un text: amb [0] per al primer, [-1] per a l'últim, i len() per saber quants n'hi ha:

Pots llegir i modificar un element concret assignant-li un valor nou:

Afegir i treure elements

.append(valor) afegeix un element al final de la llista. És el mètode que faràs servir més sovint per construir llistes dinàmicament:

.pop() treu i retorna l'últim element. Si li passes un índex, treu el de la posició indicada:

del llista[i] esborra l'element de la posició i sense retornar-lo:

Recórrer una llista amb for

La manera més senzilla de visitar tots els elements d'una llista és for x in llista:. En cada iteració, x pren el valor de l'element corresponent:

Pots operar amb cada element dins del bucle. Per exemple, sumar tots els valors d'una llista de nombres:

De fet, Python ja té funcions integrades per a les operacions més habituals sobre llistes numèriques: sum(), min() i max():

Recórrer amb índex: for i in range(len(...))

De vegades no sols vols el valor, sinó també saber a quina posició és. Pots combinar range() i len() per obtenir l'índex a cada pas:

Tenir l'índex també et permet modificar elements mentre recorres la llista. Per exemple, doblar tots els valors:

Llistes de textos i .split()

Recordes .split() del capítol anterior? Divideix un text i retorna una llista de paraules. Ara que coneixes les llistes, pots treballar amb el resultat com vulguis:

Pots passar-li un separador diferent de l'espai. Per exemple, per dividir una data en parts:

La funció inversa és ", ".join(llista), que uneix els elements amb un separador:

Errors típics

1. IndexError: accedir a un índex que no existeix — si la llista té 3 elements, els índexs vàlids van de 0 a 2. Qualsevol altre valor donarà error:

2. Oblidar que .append() no retorna res útil — un error molt freqüent és assignar el resultat de .append() a la pròpia llista, cosa que la sobreescriu amb None:

3. Modificar una llista mentre la recorres — afegir o esborrar elements dins d'un for x in llista: pot saltar-se elements o donar IndexError. Si has de modificar la llista, usa range(len(llista)) o treballa amb una còpia:

Exercici

Escriu un programa que llegeixi 5 nombres enters (un per línia) i mostri la seva mitjana amb un decimal. Utilitza una llista per guardar els nombres llegits.

Per exemple, si l'usuari introdueix 10, 20, 30, 40 i 50, la sortida ha de ser 30.0.

Pista: guarda cada nombre llegit a la llista amb .append(). Quan tinguis els 5, calcula la mitjana amb sum() i len().

Resum

  • Una llista s'escriu entre claudàtors: [1, 2, 3]. Pot estar buida ([]) i contenir qualsevol tipus de valor.
  • llista[i] accedeix a l'element de la posició i; els índexs negatius compten des del final. len(llista) retorna el nombre d'elements.
  • .append(valor) afegeix un element al final; .pop() en treu l'últim (o el de la posició indicada); del llista[i] esborra l'element i sense retornar-lo.
  • for x in llista: visita tots els elements; for i in range(len(llista)): t'dóna l'índex a cada pas.
  • sum(), min() i max() funcionen directament sobre llistes numèriques.
  • text.split() retorna una llista de paraules; sep.join(llista) fa el camí invers.