Una lista es una colección ordenada de valores. Una lista puede contener cualquier cosa.
En Python, el tipo de datos que representa a las listas se llama list.
Las dos maneras principales de crear una lista son:
usar una lista literal, con los valores entre corchetes:
>>> primos = [2, 3, 5, 7, 11]
>>> primos
[2, 3, 5, 7, 11]
>>> []
[]
>>> [1.0 + 2.0, 3.0 + 4.0 + 5.0]
[3.0, 12.0]
>>> ['hola ' + 'mundo', 24 * 7, True or False]
['hola mundo', 168, True]
usar la función list aplicada sobre un iterable:
>>> list('hola')
['h', 'o', 'l', 'a']
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list()
[]
len(l) entrega el largo de la lista; es decir, cuántos elementos tiene:
>>> colores = ['azul', 'rojo', 'verde', 'amarillo']
>>> len(colores)
4
>>> len([True, True, True])
3
>>> len([])
0
l[i] entrega el i-ésimo valor de la lista. El valor i se llama índice del valor. Al igual que para los strings, los índices parten de cero:
>>> colores = ['azul', 'rojo', 'verde', 'amarillo']
>>> colores[0]
'azul'
>>> colores[3]
'amarillo'
Además, es posible modificar el valor del i-ésimo elemento:
>>> colores[1] = 'negro'
>>> colores
['azul', 'negro', 'verde', 'amarillo']
Si el índice i indica un elemento que no está en la lista, ocurre un error de índice:
>>> colores[4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Si el índice es negativo, los elementos se cuentan desde el final hacia atrás:
>>> colores[-1]
'amarillo'
>>> colores[-4]
'azul'
l.append(x) agrega el elemento x al final de la lista:
>>> primos = [2, 3, 5, 7, 11]
>>> primos.append(13)
>>> primos.append(17)
>>> primos
[2, 3, 5, 7, 11, 13, 17]
Un comentario al margen: append es un método. Los métodos son funciones que están dentro de un objeto. Cada lista tiene su propia función append. Es importante tener esta distinción clara, ya que hay operaciones que están implementadas como funciones y otras como métodos.
sum(x) entrega la suma de los valores de la lista:
>>> sum([1, 2, 1, -1, -2])
1
>>> sum([])
0
l1 + l2 concatena las listas l1 y l2:
>>> list('perro') + [2, 3, 4]
['p', 'e', 'r', 'r', 'o', 2, 3, 4]
l * n repite n veces la lista l:
>>> [3.14, 6.28, 9.42] * 2
[3.14, 6.28, 9.42, 3.14, 6.28, 9.42]
>>> [3.14, 6.28, 9.42] * 0
[]
Para saber si un elemento x está en la lista l, se usa x in l. La versión negativa de in es not in:
>>> r = range(0, 20, 2)
>>> r
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> 12 in r
True
>>> 15 in r
False
>>> 15 not in r
True
l[i:j] es el operador de rebanado, que entrega una nueva lista que tiene desde el i-ésimo hasta justo antes del j-ésimo elemento de la lista l:
>>> x = [1.5, 3.3, 8.4, 3.1, 2.9]
>>> x[2:4]
[8.4, 3.1]
l.count(x) cuenta cuántas veces está el elemento x en la lista:
>>> letras = list('paralelepipedo')
>>> letras.count('p')
3
l.index(x) entrega cuál es el índice del valor x:
>>> colores = ['azul', 'rojo', 'verde', 'amarillo']
>>> colores.index('verde')
2
>>> colores.index('fucsia')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'fucsia' is not in list
l.remove(x) elimina el elemento x de la lista:
>>> l = [7, 0, 3, 9, 8, 2, 4]
>>> l.remove(2)
>>> l
[7, 0, 3, 9, 8, 4]
del l[i] elimina el i-ésimo elemento de la lista:
>>> l = [7, 0, 3, 9, 8, 2, 4]
>>> del l[2]
>>> l
[7, 0, 9, 8, 2, 4]
l.reverse() invierte la lista:
>>> l = [7, 0, 3, 9, 8, 2, 4]
>>> l.reverse()
>>> l
[4, 2, 8, 9, 3, 0, 7]
l.sort() ordena la lista:
>>> l = [7, 0, 3, 9, 8, 2, 4]
>>> l.sort()
>>> l
[0, 2, 3, 4, 7, 8, 9]
Para todas estas operaciones, siempre hay que tener muy claro si la lista es modificada o no. Por ejemplo, el rebanado no modifica la lista, sino que crea una nueva:
>>> ramos = ['Progra', 'Mate', 'Fisica', 'Ed.Fisica']
>>> ramos[:2]
['Progra', 'Mate']
>>> len(ramos) # la lista sigue teniendo cuatro elementos
4
Una lista es un objeto iterable. Esto significa que sus valores se pueden recorrer usando un ciclo for:
valores = [6, 1, 7, 8, 9]
for i in valores:
print i ** 2
En cada iteración del for, la variable i toma uno de los valores de la lista, por lo que este programa imprime los siguientes valores:
36
1
49
64
81