Introducción a la programación en Python

clase 03a
Listas (I)

Aparte de los tipos numéricos, hay en Python otros tipos compuestos, como ser secuencias, sets y mapeos.
Dentro de las secuencias, ya vimos las cadenas de caracteres (strings).
Otro tipo muy importante de secuencia son las listas.

Listas I

Una lista en Python es una estructura de datos formada por una secuencia ordenada de objetos.
Una forma básica de definirlas es entre corchetes, separando sus elementos con comas.

In [61]:
lista_1 = [1, 2, 55, 21]
In [62]:
lista_2 = ["foo", 'bar']
In [63]:
lista_3 = [17, "hola", [23, 12], 'foo']
In [64]:
print(lista_3)
[17, 'hola', [23, 12], 'foo']

Las listas en Python son:

  • heterogéneas: pueden estar conformadas por elementos de distintos tipo, incluidos otras listas.
  • mutables: sus elementos pueden modificarse

Los elementos de una lista pueden accederse mediante su índice, siendo 0 el índice del primer elemento.

In [65]:
lista_3[0]
Out[65]:
17
In [66]:
lista_3[1]
Out[66]:
'hola'

La función len() devuelve la longitud de la lista (su cantidad de elementos).

In [67]:
len(lista_3)
Out[67]:
4

Los índices de una lista van entonces de 0 a len(lista)-1

In [68]:
lista_3[3]
Out[68]:
'foo'

Pueden usarse también índices negativos, siendo -1 el índice del último elemento.

In [69]:
lista_3[-1]
Out[69]:
'foo'

Los índices negativos van entonces de -1 (último elemento) a -len(lista) (primer elemento).

In [70]:
lista_3[-len(lista_3)]
Out[70]:
17

A través de los índices, pueden cambiarse los elementos de una lista en el lugar.

In [71]:
lista_3[1] = "adiós"
In [72]:
lista_3
Out[72]:
[17, 'adiós', [23, 12], 'foo']

Indexado y particionado

Una vez que una lista está definida, sus elementos pueden accederse mediante su índice.

In [73]:
lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lista)
print(len(lista))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10
In [74]:
lista[3]
Out[74]:
3

Puede accederse a una porción de una lista, indicando un rango entre dos índices separados por dos puntos. Devuelve desde el primer índice hasta el segundo ínice menos 1.

Por ejemplo, para ir del elemento de índice 0 hasta el índice 3, pero sin incluirlo:

In [75]:
lista[0:3]
Out[75]:
[0, 1, 2]

Omitiendo el índice inicial, se entiende que se comienza en el primer elemento.

In [76]:
lista[:3]
Out[76]:
[0, 1, 2]

Omitiendo el segundo índice, se llega hasta el final de la lista.

In [77]:
lista[5:]
Out[77]:
[5, 6, 7, 8, 9]

Por lo tanto, omitiendo ambos índices se recorre toda la lista.

In [78]:
lista[:]
Out[78]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Se pueden usar índices negativos; -1 corresponde al último elemento de la lista, y -len(lista) corresponde al primer elemento.

In [79]:
lista[-1]
Out[79]:
9
In [80]:
lista[0:-1]
Out[80]:
[0, 1, 2, 3, 4, 5, 6, 7, 8]
In [81]:
lista[-10]
Out[81]:
0

Opcionalmente se puede dar un tercer argumento, para determinar el incremento (por defecto, 1).

In [82]:
lista[1:8:2]
Out[82]:
[1, 3, 5, 7]
In [83]:
lista[1:8:3]
Out[83]:
[1, 4, 7]

De esa manera se puede recorrer la lista en orden inverso:

In [84]:
lista[7:3:-1]
Out[84]:
[7, 6, 5, 4]
In [86]:
lista[-1:-11:-1]
Out[86]:
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Si se ingresa un índice que excede el rango de la lista, genera un error:

In [87]:
lista[10]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-87-47b17e44d0b2> in <module>
----> 1 lista[10]

IndexError: list index out of range