Curso de Python: 3-Listas

Listas

Python gestiona colecciones de valores llamadas listas o arrays dinámicos. A diferencia de los arrays o matrices en otros lenguajes de programación, las listas poseen características más avanzadas y potentes, como la posibilidad de trabajar con diferentes tipos de datos, ordenar o invertir los datos, etc.

Una lista se crea definiendo entre corchetes todos sus valores separados por comas. Los valores de una lista pueden ser homogéneos (del mismo tipo) o heterogéneos (distinto tipo):
>>> semestre = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio']
>>> notas = [5.4, 6.2, 3.3, 4.0, 8.3]
>>> lista = ['Nerea', 7.8, 'Carlos', 7.5]

Si deseamos añadir más elementos al final de una lista, utilizaremos la función append() (añadir): 
>>> lista.append('Cristina')
>>> lista.append(7.3)
>>> lista
['Nerea', 7.8, 'Carlos', 7.5, 'Cristina', 7.3]

El acceso a los elementos de la lista es similar al de los caracteres en un literal:

>>> lista[2] # Acceso al segundo elemento 'Carlos'
>>> lista[:2] # Elementos hasta la posicion 2
['Nerea', 7.8]
>>> lista[2:] # Elementos desde la posicion 2
['Carlos', 7.5, 'Cristina', 7.3]
>>> lista[2:4] # Elementos en el rango 2 a 4
['Carlos', 7.5]
>>> lista[-2] # Penultimo elemento
'Cristina'

Para conocer el tamaño de la lista, se utiliza la función len():

>>> print "Tamaño de lista:", len(lista), "elementos"
Tamaño de lista: 6 elementos

A diferencia de un literal, una lista permite cambiar el valor de sus elementos. En el siguiente ejemplo, se suma medio punto a la nota de Cristina:
>>> lista[5] = lista[5]+0.5
>>> lista
['Nerea', 7.8, 'Carlos', 7.5, 'Cristina', 7.8]

Para saber cuántas veces aparece un valor dentro de una lista, se utiliza la función count() (contar): 
>>> lista.count(7.8)
2

Para conocer la posición de la primera ocurrencia de un determinado valor, usar la función index() (índice):

>>> lista.index('Carlos')
2

En el siguiente ejemplo, se sustituye a Carlos por Javier, así como también su nota:

>>> lista[2:4]=['Javier',6.7] # rango 2 a 4
>>> lista
['Nerea', 7.8, 'Javier', 6.7, 'Cristina', 7.8]

Para eliminar elementos, la función remove() (quitar) localiza en la lista el primer elemento encontrado, y lo quita de la lista:
>>> lista.remove('Cristina') # Quita el elemento 'Cristina'
>>> lista
['Nerea', 7.8, 'Javier', 6.7, 7.8]
>>> lista.insert(4,'Cristina') # Inserta 'Cristina' en pos. 4
>>> lista
['Nerea', 7.8, 'Javier', 6.7, 'Cristina', 7.8]

Se puede eliminar más elementos, indicando un rango de la lista y asignándole una lista vacía:
>>> lista[4:6]=[]
>>> lista
['Nerea', 7.8, 'Javier', 6.7]

Otra forma de eliminar elementos es mediante la función pop() (reventar), que muestra el valor del elemento eliminado. Si no se especifica parámetro, elimina el valor de la última posición de la lista:
>>> lista.pop() # último elemento
6.7
>>> lista
['Nerea', 7.8, 'Javier']
>>> lista.pop(1) # elemento nº 1
7.8
>>> lista
['Nerea', 'Javier']

Para insertar un elemento, se utiliza la función insert(), indicando la posición y el elemento a insertar:
>>> lista=['Nerea', 7.8, 'Javier', 6.7]
>>> lista.insert(2, 'Antonio')
>>> lista.insert(3, 6.7)
>>> lista.insert(4, 'Carmen')
>>> lista.insert(5, 7.2)
>>> lista
['Nerea', 7.8, 'Antonio', 6.7, 'Carmen', 7.2, 'Javier', 6.7]

También se pueden insertar elementos de forma similar a reemplazar, pero indicando en el rango la misma posición de inicio que de fin. El siguiente ejemplo hace en una línea lo mismo que el ejemplo anterior:
>>> lista=['Nerea', 7.8, 'Javier', 6.7]
>>> lista[2:2]=['Antonio', 6.7, 'Carmen', 7.2]

Para añadir una lista a otra lista utilizaremos la función extend() (extender), o sumaremos ambas listas:
>>> listab = ['Juan', 5.4, 'Luis', 6.8]
>>> lista
['Nerea', 7.8, 'Antonio', 6.7, 'Carmen', 7.2, 'Javier', 6.7]
>>> lista.extend(listab) # O también lista=lista+listab
>>> lista
['Nerea', 7.8, 'Antonio', 6.7, 'Carmen', 7.2, 'Javier', 6.7, 'Juan', 5.4, 'Luis', 6.8]

Lo siguiente vacía por completo la lista (sin valores de inicio ni fin en el rango, se asume toda la lista):
>>> lista[:]=[] # Vacía la lista
>>> lista
[]

Gracias a la función sort() (ordenar), los valores de una lista se ordenan alfabéticamente, o de menor a mayor, siempre y cuando ésta es homogénea (datos del mismo tipo).
>>> semestre.sort()
>>> semestre
['Abril', 'Enero', 'Febrero', 'Junio', 'Marzo', 'Mayo']

También es posible invertir los elementos de la lista, gracias a la función reverse() (invertir).
>>> semestre.reverse()
>>> semestre
['Mayo', 'Marzo', 'Junio', 'Febrero', 'Enero', 'Abril']

Los valores de una lista pueden ser también objetos e incluso otras listas (anidamiento):
>>> lista1 = ['Arroyomolinos', 'Mostoles', 'Alcorcon']
>>> lista2 = ['Navacerrada', lista1, 'Villalba']
>>> lista2
['Navacerrada', ['Arroyomolinos', 'Mostoles', 'Alcorcon'], 'Villalba']

La lista anidada es una referencia, por lo que un cambio en la lista original afectará también a la referencia:
>>> lista1[1]="Fuenlabrada" # Mostoles por Fuenlabrada
>>> lista1
['Arroyomolinos', 'Fuenlabrada', 'Alcorcón']
>>> lista2
['Navacerrada', ['Arroyomolinos', 'Fuenlabrada', 'Alcorcón'], 'Villalba']

Para acceder a los elementos de la lista anidada, se especifica primero el elemento en la lista posicionado en
la anidada, y a continuación la posición dentro de la lista anidada:
>>> lista2[1] # Posición en lista anidada
['Arroyomolinos', 'Fuenlabrada', 'Alcorcon']
>>> lista2[1][1] # Posición en elemento de lista anidada 'Fuenlabrada'

Si se modifica la referencia, el cambio afectará a la lista original:
>>> lista2[1][1]='Mostoles' # Fuenlabrada por Mostoles
>>> lista2 # Cambio en la referencia
['Navacerrada', ['Arroyomolinos', 'Mostoles', 'Alcorcon'], 'Villalba']
>>> lista1 # Cambio en la lista original
['Arroyomolinos', 'Mostoles', 'Alcorcon']


Operadores básicos
Operador +: Suma números, concatena cadenas y extiende listas
Operador -: Resta números
Operador *: Multiplica números, repite textos y repite listas
Operador /: Divide números
Operador %: Resto de división
Operador **: Exponenciación

Cadenas como colecciones
Las cadenas de texto, en sí mismas, son colecciones de caracteres, por lo que se puede acceder a éstos indicando su/s posición/es entre corchetes, sabiendo que comienza desde la posición cero hasta longitud-1:
>>> pueblo = "Arroyomolinos"
>>> pueblo[4] # carácter en posición 4
'y'
>>> pueblo[:6] # caracteres HASTA posición 6
'Arroyo'
>>> pueblo[6:] # caracteres DESDE la posición 6
'molinos'
>>> pueblo[6:10] # caracteres entre las posiciones 6 y 10
'moli'
>>> pueblo[-1] # último carácter
's'
>>> pueblo[-3] # antepenúltimo carácter
'n'
>>> pueblo[-5:] # últimos 5 caracteres
'linos'
>>> pueblo[:-5] # todo menos 5 últimos caracteres
'Arroyomo'

Si se desea conocer el tamaño de un literal, la función len() (de length o longitud), retorna el número de caracteres que lo conforma.
>>> len(pueblo)
13


Entregas:

Enlaces de interés:
© commandcat
Maira Gall