Volver al índice Listas

Las listas son una estructura de datos muy flexible. Python permite manipular listas de muchas maneras. En esta lección aprenderás algunas de ellas:


Listas

Las listas son conjuntos ordenados de elementos (números o cadenas o listas). Para identificar a las listas se pueden definir variables igualándolas a listas. Estos son ejemplos de listas:

>>> laborables = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes']

>>> fecha = ['Lunes', 27, 'Octubre', 1997]

>>> peliculas = [ ['Senderos de Gloria', 1957], ['Hannah y sus hermanas', 1986]]

Las listas se pueden concatenar con el símbolo de la suma:

>>> vocales = ['E', 'I', 'O']
>>> print vocales
['E', 'I', 'O']
>>> vocales = vocales + ['U']
>>> print vocales
['E', 'I', 'O', 'U']
>>> vocales = ['A'] + vocales
>>> print vocales
['A', 'E', 'I', 'O', 'U']
>>> vocales = vocales + 'Y'
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in ?
    vocales = vocales + 'Y'
  TypeError: can only concatenate list (not "str") to list

El último ejemplo da error porque 'Y' no es una lista, sino una cadena. La forma correcta es la siguiente:

>>> vocales = vocales + ['Y']

>>> print vocales

['A', 'E', 'I', 'O', 'U', 'Y']


Manipular elementos individuales de una lista

Cada elemento se identifica por su posición en la lista, teniendo en cuenta que se empieza a contar por 0. No se puede hacer referencia a elementos fuera de la lista, aunque también se pueden utilizar números negativos.

>>> fecha = [27,'Octubre',1997]
>>> print fecha[0], fecha[1], fecha[2]
27 Octubre 1997
>>> print fecha[3]
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in ?
    print fecha[3] IndexError:
  list index out of range
>>> print fecha[-1], fecha[-2], fecha[-3]
1997 Octubre 27

Puedes modificar cualquier elemento de la misma manera que modificas cualquier variable.

>>> fecha = [27,'Octubre',1997]

>>> fecha[2] = 1998

>>> print fecha[0], fecha[1], fecha[2]

27 Octubre 1998


Manipular sublistas

De una lista puedes extraer sublistas, utilizando la notación nombre_de_lista [ inicio : límite ]. donde inicio y límite hacen el mismo papel que en la instrucción range()inicio, límite

>>> dias = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo']

>>> print dias[1:4] # Se extrae una lista con los valores 1, 2 y 3

['Martes', 'Miércoles', 'Jueves']

>>> print dias[4:5] # Se extrae una lista con el valor 4

['Viernes']

>>> print dias[4:4] # Se extrae una lista vacía

[]

>>> print dias[:4] # Se extrae una lista hasta el valor 4 (no incluido)

['Lunes', 'Martes', 'Miércoles', 'Jueves']

>>> print dias[4:] # Se extrae una lista desde el valor 4 (incluido)

['Jueves', 'Viernes', 'Sábado', 'Domingo']

>>> print dias[:] # Se extrae una lista con todos los valores

['Lunes', 'Martes', 'Miércoles','Jueves', 'Viernes', 'Sábado', 'Domingo']

Puedes modificar la lista modificando sublistas. De esta manera puedes modificar un elemento o varios a la vez e insertar o eliminar elementos.

>>> letras = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']

>>> letras[1:4] = ['X'] # Se sustituye la sublista ['B','C','D'] por ['X']

>>> print letras

['A', 'X', 'E', 'F', 'G', 'H']

>>> letras[1:4] = ['Y', 'Z'] # Se sustituye la sublista ['X','E','F'] por ['Y','Z']

['A','Y', 'Z', 'G', 'H']

>>> letras[0:1] = ['Q'] # Se sustituye la sublista ['A'] por ['Q']

>>> print letras

['Q', 'Y', 'Z', 'G', 'H']

>>> letras[3:3] = ['U','V'] # Inserta la lista ['U','V'] en la posición 3

>>> print letras

['Q', 'Y', 'Z', 'U', 'V', 'G', 'H']

>>> letras[0:3] = [] # Elimina la sublista ['Q','Y', 'Z']

>>> print letras

['U', 'V', 'G', 'H']


La instrucción del

La palabra reservada del permite eliminar un elemento o varios elementos a la vez de una lista,e incluso la misma lista.

>>> letras = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
>>> del letras[4] # Elimina la sublista ['E']
>>> print letras
['A', 'B', ,'C', 'D', 'F', 'G', 'H']
>>> del letras[1:4] # Elimina la sublista ['B', 'C', 'D']
>>> print letras
['A', 'F', 'G', 'H']
>>> del letras # Elimina completamente la lista
>>> print letras
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in ?
    print letras
  NameError: name 'letras' is not defined

Copiar una lista

Compara estas dos secuencias de instrucciones:

>>> lista1 = ['A', 'B', 'C']

>>> lista2 = lista1 #Esta línea es distinta en cada ejemplo

>>> print lista1, lista2

['A', 'B', ,'C'] ['A', 'B', ,'C']

>>> del lista1[1] # Elimina el elemento ['B']

>>> print lista1, lista2

['A', 'C'] ['A', 'C']

>>> lista1 = ['A', 'B', 'C']

>>> lista2 = lista1[:] #Esta línea es distinta en cada ejemplo

>>> print lista1, lista2

['A', 'B', ,'C'] ['A', 'B', ,'C']

>>> del lista1[1] # Elimina el elemento ['B']

>>> print lista1, lista2

['A', 'C'] ['A', 'B', 'C']

En el primer caso las variables lista1 y lista2 hacen referencia a la misma lista almacenada en la memoria del ordenador. Por eso al eliminar un elemento de lista1, también desaparece de lista2.

Sin embargo en el segundo caso lista1 y lista2 hacen referencia a listas distintas (aunque tengan los mismos valores, están almacenadas en lugares distintos de la memoria del ordenador). Por eso, al eliminar un elemento de lista1, no se elimina en lista2.


Recorrer una lista

Puedes recorrer una lista de principio a fin de dos formas distintas. Una forma es recorrer directamente los elementos de la lista:

>>> letras = ['A', 'B', 'C', 'D', 'E']
>>> for i in letras:
      print i,
A B C D E

La otra forma es recorrer indirectamente los elementos:

>>> letras = ['A', 'B', 'C', 'D', 'E']
>>> for i in range(len(letras)):
      print letras[i],
A B C D E

La primera forma es más sencilla, pero no permite la modificación de los elementos de la lista. La segunda forma es más complicada, pero permite más flexibilidad: se pueden modificar los elementos, la lista se puede recorrer al revés, etc.


A veces es necesario recorrer la lista en orden inverso, por ejemplo cuando se quieren eliminar elementos de la lista. Para recorrer la lista al revés, basta con utilizar la orden range adecuada.

>>> letras = ['A', 'B', 'C', 'D', 'E']
>>> for i in range(len(letras)-1,-1,-1):
      print letras[i],
E D C B A

Saber si un valor está en una lista

Para saber si un valor está en una lista puedes utilizar el operador in. Por ejemplo, el programa siguiente comprueba si el usuario es una persona autorizada:

personas_autorizadas = ['Alberto', 'Carmen']
nombre = raw_input('Dime tu nombre: ')
if nombre in personas_autorizadas:
  print 'Estás autorizado'
else:
  print 'No estás autorizado'

Ejercicios relacionados con este tema: Ejercicios de listas
Siguiente lección: El bucle while

Autor: Bartolomé Sintes Marco
Última modificación de esta página: 7 de noviembre de 2002