5. Estructures de dades
En aquesta unitat anem a treballar les estructures bàsiques d'emmagatzematgee de dades que ens ofereix Python. Serà inevitable fer una comparació amb els vectors i ArrayList d'altres llenguatges com Java.
5.1 Llistes (list)
Les llistes són una estructura que conté una sèrie d'elements ordenats, delimitades per claudàtors ([]) i separades per comes (,).
Atenció
El fet que estigui ordenat implica que hi ha un primer element, un segon, etc. i que podem accedir als elements per la seua posició. No vol dir que el tingui un contingut ordenat
Aquest elements poden ser del mateix tipus o tindre tipus heterogenis, com òdem veure a continuació:
Possibles llistes
Encara que hi ha diverses maneres de afegir i eliminar, comentem les més legibles i habituals:
llista.append(element)--> afig l'element al final de la llista.llista.insert(index,element)--> afig l'element en la posició determinada per índex. Si l'índex està fora de rang, ho posa al final.llista.remove(element)--> elimina l'element de la llista. Si nó existeix botarà l'errorValueError
Per a consultar i/o modificar elements concrets farem servir la notació dels claudàtors com si foren vectors de C o Java:
print(llista[3])llista[3]="Pep"
Per a recòrrer les llistes de manera seqüencial, podem recorrer a distints tipus de bucles for:
Recorregut sense índex
En aquest exemple, una variable prendrà el valor de cada element de la llista:
Recorregut amb índex
En aquest exemple, una variable prendrà els valor dels distints índex de la llista. Farem servir la funcio range(n) que torna un valor entre 0 i l'anterior a n i la funció len(llista) que ens retorna el tamany de la llista:
Per últim, podem utilitzar l'operador in per a saber si un element està o no a una llista, per exemple per a poder esborrarlo sense problemes
5.1.1 Slicing (rebanar)
El slicing és una manera de treballar, una mica complexa, que ens serveix per a rebanar o extreure una porció de la llista. Fa servir la notació dels dos punts inici:fi[:bot].
Aquesta notació representa començar a l'inici fins a l'anterior al fi, visitnt els elements segons el bot indicat (si bot no apareix, val 1).
Quan els valors d'inici o fi son negatius, comencen a contar-se desde la dreta cap l'esquerre, però és poc natural, i es recomana sols en circumstànices concretes
Anem a veure-ho mitjançant exemples. A la plataforma tens un arxiu nba.txt amb el llistat d'equips de la nba. Amb el següent codi:
5.1.2 Altres mètodes
del llista[index]→ Per eliminar una element de la llista, sense saber el seu valorllista.pop()→ Per eliminar i retornar l'últim element de la llistallista.count(element)→ retorna el numero d'ocurrències de l'element a la llistallista.sort()→ ordena ascendentment els elements de la llista. Si volem descendent posarem[reverse=True].
5.2 Tuples (tuple)
Les tuples son estructures semblants a les llistes, però amb la gran salvetat que son inmutables, és a dir, no poden modificar-se.
Això les fa molt més eficients en quant a consum de recursos, però clar, hem d'estar segurs que les dades no necessitarem que canvien. Altres diferències:
- S'inicien amb
()en compte de[] - No podem modificar amb tupla[index]=elemet
- No disposen dels operadors
append,removei qualssevol altre que les modifiquen
5.3 Diccionaris (dict)
Un diccionari és una colecció d'elements etiquetats, amb la manera etiqueta:valor. Ve a ser el que coneixem amb un objecte JSON. Això ens permetrà, entre altres coses l'accedir a un element, no sols pel seu índex, sinó per la seua etiqueta:
Els diccionaris poden contenir qualssevol tipus de dades al seu valor. Vegem algunes funcions útils autoexplicades: