# Llistes en Python
- Les llistes són un tipus de dada composta que permet emmagatzemar dades de qualsevol mena.
- La llista en Python són variables que emmagatzemen arrays, internament cada posició pot ser un tipus de dades diferent.
## Crear llistes Python
```python=
lista = [1, 2, 3, 4]
```
- També es pot crear usant list i passant un objecte iterable.
```python=
lista = list("1234")
```
- Una llista es crea amb [] separant els seus elements amb comes ,. Un gran avantatge és que poden emmagatzemar tipus de dades diferents.
```python=
lista = ["Hola", 4, 3.1416, [1, 2, 3]]
```
## Accedir i modificar llistes
- Si tenim una llista amb 3 elements emmagatzemats en ella, podem accedir als mateixos usant claudàtors i un índex, que va des de 0 a n-1 sent n la grandària de la llista.
```python=
lista = ["Hola", 4, 3.1416, [1, 2, 3]]
print(lista[0]) #Hola
print(lista[1]) #4
print(lista[2]) #3.1416
print(lista[3]) # [1, 2, 3]
```
- Es pot també accedir a l'últim element usant l'índex [-1] o al penúltim usant el [-2] i així successivament
```python=
lista = ["Hola", 4, 3.1416, [1, 2, 3]]
print(lista[-1]) # [1, 2, 3]
```
## Modificar un element de la llista
- Per a Modificar un element de la llista, n'hi ha prou amb assignar amb l'operador = el nou valor.
```python=
lista = ["Hola", 4, 3.1416, [1, 2, 3]]
lista[3]=True
print(lista) #["Hola", 4, 3.1416, True]
```
## Eliminar un element de la llista
```python=
lista = ["Hola", 4, 3.1416, [1, 2, 3]]
del lista[2]
print(lista) #["Hola", 4, [1, 2, 3]]
```
## Llistes niades
- Les llistes niades són llistes dins d'altres llistes, fins i tot podem tenir diversos nivells.
- Per a accedir als seus elements només hem d'usar [] tantes vegades com nivells de niat tinguem.
```python=
x = [1, 2, 3, ['p', 'q', [5, 6, 7]]]
print(x[3][0]) #p
print(x[3][2][0]) #5
print(x[3][2][2]) #7
```
## Crear subllistes
- Es poden crear subllistes més petites d'una més gran.
- Per a això hem d'usar **:** entre claudàtors, indicant a l'esquerra el valor d'inici, i a la dreta el valor final que no està inclòs.
- Per tant [0:2] crearà una llista amb els elements [0] i [1] de l'original.
```python=
lista = [1, 2, 3, 4, 5, 6]
print(lista[0:2]) #[1, 2]
print(lista[2:6]) #[3, 4, 5, 6]
```
- També podem modificar múltiples valors de la llista alhora usant **:**.
```python=
lista = [1, 2, 3, 4, 5, 6]
lista[0:3] = [0, 0, 0]
print(lista) #[0, 0, 0, 4, 5, 6]
```
## Afegir elements a la llista
- Afegir elements a la llista usant l'operador **+**:
```python=
lista = [1, 2, 3, 4]
lista += [5, 6]
print(l) #[1, 2, 3, 4, 5, ]6
```
- També es pot assignar una llista amb n elements a n variables.
```python=
lista = [1, 2, 3]
x, y, z = lista
print(x, y, z) #1 2 3
```
## Iterar llistes
- En Python és molt fàcil iterar una llista:
```python=
lista = [5, 9, 10]
for i in lista:
print(i)
#5
#9
#10
```
- També podem mostrar l'índex de la llista, que prengui valors des de 0 fins a n-1, es pot fer de la següent manera.
```python=
lista = [5, 9, 10]
for i, l in enumerate(lista):
print(i, l)
#0 5
#1 9
#2 10
```
- Iterar dues llistes alhora
```python=
lista1 = [1, 2, 3]
lista2 = ["dilluns", "dimarts", "dimecres"]
for l1, l2 in zip(lista1, lista2):
print(l1, l2)
#1 dilluns
#2 dimarts
#3 dimecres
```
- Iterar les llistes usant els índexs com hem vist al principi, i fent ús de len(), que ens retorna la longitud de la llista.
```python=
lista1 = [5, 9, 10]
for i in range(0, len(lista)):
print(lista1[i])
#5
#9
#10
```
## Mètodes llistes
### Afegeir elements a una llista
- El mètode **append()** afegeix un element al final de la llista.
```python=
lista = [1, 2]
lista.append(3)
print(lista) #[1, 2, 3]
```
- El mètode **extend()** permet afegir una llista a la llista inicial.
```python=
lista = [1, 2]
lista.extend([3, 4])
print(lista) #[1, 2, 3, 4]
```
- El mètode insert() afegeix un element en una posició o índex determinat.
```python=
lista = [1, 3]
lista.insert(1, 2)
print(lista) #[1, 2, 3]
```
### Eliminar un element de la llista
- El mètode remove() rep com a argument un objecte i l'esborra de la llista.
```python=
lista = [1, 2, 3]
lista.remove(3)
print(lista) #[1, 2]
```
- El mètode pop() elimina per defecte l'últim element de la llista, però si es passa com a paràmetre un índex permet esborrar elements diferents a l'últim.
```python=
lista = [1, 2, 3]
lista.pop()
print(lista) #[1, 2]
```
### Invertir l'ordre d'una llista
- El mètode reveure's() inverteix l'ordre de la llista.
```python=
lista = [1, 2, 3]
lista.reverse()
print(lista) #[3, 2, 1]
```
### Ordenar elements
- El mètode sort() ordena els elements de menys a major per defecte.
```python=
lista= [3, 1, 2]
lista.sort()
print(lista) #[1, 2, 3]
```
- També permet ordenar de major a menor si es passa com a paràmetre reverse=True.
```python=
lista = [3, 1, 2]
lista.sort(reverse=True)
print(lista) #[3, 2, 1]
```
- També permet introduir un paràmetre opcional que representa l'índex des del qual començar la cerca de l'objecte. És com si ignorés tot el que hi ha abans d'aquest índex per a la cerca, en aquest cas el 4.
```python=
lista = [2, 5, 7, 1, 2, 1, 4, 5]
print(lista.index(2, 4)) #4
```
Fonts:
https://ellibrodepython.com/sets-python
https://entrenamiento-python-basico.readthedocs.io/es/latest/leccion3/tipo_listas.html