Llistes i tuples¶
Què són?¶
Les llistes són objectes de tipus
listi les tuples de tipustupleLes llistes, les tuples i els strings són (tipus) seqüències, vegeu python:typesseq
Les seqüències contenen referències als seus elements als quals s’hi pot accedir individualment mitjançant un índex.
Com es construeixen?¶
En un valor literal de tipus seqüència
els elements es separen amb comes i
s’envolten entre claudàtors, si és una llista
no s’envolten o s’envolten entre parèntesis si és una tupla
llistes
tuples
[10, 20, 30, 40] ["spam", "bungee", "swallow"] ["hello", 2.0, 5, [10, 20]] [5]
10, 20, 30, 40 (10, 20, 30, 40) "spam", "bungee", "swallow" "hello", 2.0, 5, [10, 20] (5,)
La seqüència buida no té elements (o la longitud és zero)
llistes
tuples
[] list()
() tuple()
Una variable es pot referir a una llista o a una tupla (assignació)
>>> s = [1, -21, 'a'] >>> t = 'x', -7
Desempaquetar una seqüència¶
Podem desempaquetar qualsevol seqüència
>>> t = 'x', -7 # contruim la tupla t >>> lletra, numero = t # desempaquetem t >>> lletra 'x' >>> numero -7
>>> s = [1, -21, 'a'] # construim la llista s >>> a, b, c = s # desempaquetem s >>> a 1 >>> b -21 >>> c 'a'
L’assignació múltiple
crea una tupla a partir de les expressions separades per comes de la dreta
desempaqueta el tuple en les variables de l’esquerra
>>> x, y = 0, 1
Les funcions sempre retornen un valor que pot ser una tupla
>>> def f(a, b, c): ... return a + b*c, a - b*c # construir una tupla i retornar-la
>>> r, s = f(3, -2, 5) # desempaquetar
Operacions comunes als tipus seqüència¶
Vegeu python:typesseq-common
Pertinença a una seqüència¶
Un element pertany (
in) o no pertanynot ina la seqüènciaAvís
Als strings,
ina més de comprovar la pertinença d’un caràcter a l'string, també permet comprovar si el substring de l’esquerra apareix a l'string de la dreta
Comparacions¶
Operadors:
==,!=,<,>,<=,>=Les comparacions es fan en ordre lexicogràfic
>>> (1, 'A') == (1, 'A') True >>> [1, 3] < [1, 2, 3] False >>> [1, 3] >= [1, 2, 3] True
Conversió de tipus¶
Convertir una llista en tupla
>>> a = [3, (1.5, 2.1, 3.3e4), 'abc', [9, 2]] >>> b = tuple(a) >>> b (3, (1.5, 2.1, 33000.0), 'abc', [9, 2])
Convertir una tupla en llista
>>> list(b) [3, (1.5, 2.1, 33000.0), 'abc', [9, 2]]
Mutabilitat¶
Operacions sobre seqüències mutables¶
Vegeu typesseq-mutable
Les llistes són seqüències mutables
Operador d’accés usat a l’esquerra d’una assignació per a substituir un element
>>> fruit = ["banana", "apple", "quince"] >>> fruit[0] = "pear" >>> fruit[2] = "orange" >>> fruit ['pear', 'apple', 'orange']
Operador llesca usat a l’esquerra d’una assignació per a substituir una llesca
>>> a_list = ["a", "b", "c", "d", "e", "f"] >>> a_list[1:3] = ["x", "y"] >>> a_list ['a', 'x', 'y', 'd', 'e', 'f']
Operador llesca usat a l’esquerra d’una assignació per a esborrar una llesca
>>> a_list = ["a", "b", "c", "d", "e", "f"] >>> a_list[1:3] = [] >>> a_list ['a', 'd', 'e', 'f']
Operador llesca usat a l’esquerra d’una assignació per a inserir elements
>>> a_list = ["a", "d", "f"] >>> a_list[1:1] = ["b", "c"] >>> a_list ['a', 'b', 'c', 'd', 'f'] >>> a_list[4:4] = ["e"] >>> a_list ['a', 'b', 'c', 'd', 'e', 'f']
Esborrar elements¶
Sentència
delper a esborrar un element>>> a = ["one", "two", "three"] >>> del a[1] >>> a ['one', 'three']
Sentència
delper a esborrar una llesca>>> a_list = ["a", "b", "c", "d", "e", "f"] >>> del a_list[1:5] >>> a_list ['a', 'f']
Mètodes modificadors¶
Els mètodes formen part dels objectes i s’invoquen (es criden) aplicant l’operador punt (.) després de l’objecte seguit pel nom del mètode
Els mètodes modificadors de seqüències mutables són
append()afegeix un element al final de la llistareverse()reordena els elements de la llista en ordre inversinsert(),extend()iremove()
Generar seqüències¶
Generar llistes a partir dels elements:
[]iappend()>>> r = [] >>> r [] >>> r.append(8) >>> r [8] >>> r.append(-3) >>> r [8, -3] >>> r.append(5) >>> r [8, -3, 5]
Per generar tuples a partir dels elements cal generar una llista i convertir-la a tupla
>>> t = tuple(r) >>> t (8, -3, 5)
Funcions i funcions modificadores¶
Funció modificadora: funció que modifica algun dels seus paràmetres
Vegeu l’exemple al Python tutor
Funció: funció que no modifica cap dels seus paràmetres
Les funcions retornen un valor que només depèn dels seus paràmetres
Còpia d’objectes¶
Cal copiar un objecte mutable quan volem canviar el seu valor, però també conservar l’antic
Copiar objectes és complicat: cal decidir la profunditat de la còpia
Profunditat de la còpia d’un objecte
còpia superficial: nou objecte amb les mateixes referències que l’original
còpia profunda: nou objecte amb còpies (recursives) de les referències de l’original
L’operador
ispermet saber si dues expressions s’avaluen al mateix objecte>>> a = 3 >>> b = 5 >>> a is b False >>> c = a >>> a is c True
Còpia superficial de llistes amb el mètode
copy()>>> l1 = [[1, 2, [3]], 4, [5, 6]] >>> l2 = l1.copy() >>> l2 is l1 False >>> l2 == l1 True >>> l1[0] is l2[0] True
Vegeu l’exemple al Python Tutor
Còpia superficial de llistes amb llesques
>>> l1 = [[1, 2, [3]], 4, [5, 6]] >>> l2 = l1[:] >>> l2 is l1 False >>> l2 == l1 True >>> l1[0] is l2[0] True