List en Python, con ejemplos


El proyecto de este post lo puedes descargar pulsando AQUI.

Las listas (o ‘List’) en Python son un tipo de estructuras de datos muy flexible que guardan de forma ordenada un conjunto de datos que no tiene porque ser del mismo tipo. En otros lenguajes de programación una lista equivaldría a un array, aunque Python no exige que los elementos de la lista tenga que ser del mismo tipo (‘int’, ‘float’, ‘chr’, ‘str’, ‘bool’, ‘object’).

Veamos a continuación un ejemplo de una lista en Python:

# Declaramos una lista con diferente tipos de datos
lista = [1, 3.1416, 'j', 'jarroba.com',  True]

Como vemos la lista la declaramos entre los caracteres '[ ]' y los elementos que hay en esta lista son de diferente tipo. Vamos a continuación a recorrer la lista (con un foreach) y a imprimir los elementos de la misma con el tipo de datos que es cada uno de los elementos:

print 'Imprimimos los elementos de una lista y el tipo de dato de cada elemento'
for l in lista:
    print '%s - %s' %(l, type(l))

Como resultado de este código tenemos lo siguiente:

Imprimimos los elementos de una lista, con su tipo de dato y el contenido
1 - <type 'int'>
3.1416 - <type 'float'>
j - <type 'str'>
jarroba.com - <type 'str'>
True - <type 'bool'>

Como vemos, las listas en Python permiten trabajar con elementos de diferentes tipos de datos, tal y como hemos demostrado.

Vamos a pasar ahora a mostrar los métodos (o funciones) para trabajar con las listas en Python, y posteriormente a poner ejemplos del funcionamiento de estos métodos:

# Declaración de una lista
lista = list()

# Cuenta el número de elementos de la lista
len(lista)

# Agrega un elemento (x) al final de la lista.
lista.append(x)

# Inserta un elemento (x) en una posición determinada (pos)
lista.insert(pos, x)

# Une dos listas (une la lista2 (la que se pasa como parámetro) a la lista)
lista.extend(lista2)

# Borra el primer elemento de la lista cuyo valor sea x. Sino existe devuelve un error
lista.remove(x)

# Borra el elemento en la posición dada de la lista, y lo devuelve.
lista.pop(pos)

# Borra todos los elementos de la lista (lista.clear())
del lista[:]

# Devuelve el índice en la lista del primer elemento cuyo valor sea x.
lista.index(x)

# Devuelve el número de veces que x aparece en la lista.
lista.count(x)

# Ordena los ítems de la lista
lista.sort(cmp=None, key=None, reverse=False)

# Invierte los elementos de la lista.
lista.reverse()

# Devuelve una copia de la lista (lista.copy())
listaCopia = lista[:]

Una vez vistos los métodos (o funciones) que nos permiten trabajar con las listas, vamos a mostrar como trabajar con estos métodos. Para ello nos vamos a crear una lista en la que guardaremos las demarcaciones en la que pueden jugar los futbolistas en un partido de fútbol; es decir, que guardaremos elementos de tipo string.

Lo primero que hacemos es crearnos una variable de tipo lista (definimos esta variable de forma explicita) que llamaremos 'demarcaciones' y añadiremos los elementos con el método "append(x)":

# Ejemplo de lista en la que guardaremos las demarcaciones en el fútbol
demarcaciones = list()

# Insertamos algunas demarcaciones
demarcaciones.append('Defensa')
demarcaciones.append('Lateral')
demarcaciones.append('MedioCentro')
demarcaciones.append('Centro Campista')
demarcaciones.append('Extremo')
print demarcaciones

Si ejecutamos este fragmento de código, en el que insertamos elementos a la lista y la imprimimos, tenemos lo siguiente:

['Defensa', 'Lateral', 'MedioCentro', 'Centro Campista', 'Extremo']

Una vez que tenemos elementos en nuestra lista, podemos contar los elementos de la siguiente forma:

# Vemos cuantos elementos tiene nuestra lista
numElem = len(demarcaciones)
print 'Número de elementos en la lista: %d' %numElem

Como salida tenemos lo siguiente:

Número de elementos en la lista: 5

La función "len()" no es especifica para contar el número de elementos de la lista, sino que vale para contar el número de caracteres de un string, el número de elementos de un diccionario, etc. aunque lo mostramos en este tutorial para que sepais que el número de elementos de una lista se cuenta con esta función.

Pasamos a probar el método "insert(pos,x)" en el que inserta un elemento 'x' en la posición 'pos' de la lista que le indicamos. Veamos un ejemplo:

# Insertamos elementos en posiciones determinadas
demarcaciones.insert(0, 'Portero')
demarcaciones.insert(6, 'Delantero')
print demarcaciones

Como vemos, insertamos los elementos 'Portero' y 'Delantero' en las posiciones 0 y 6 respectivamente en la lista. RECORDAR: que las listas (como pasa en otros lenguajes de programación) empiezan enumerandose por la posición '0'. Si ejecutamos el fragmento de código anterior, veremos que efectivamente insertamos en la primera y última posición los elementos 'Portero' y 'Delantero'.

['Portero', 'Defensa', 'Lateral', 'MedioCentro', 'Centro Campista', 'Extremo', 'Delantero']

El siguiente método "extend(list)" une los elementos de la lista que se le pasa como parámetro a la lista. Vemos en el siguiente fragmento de código como nos creamos una lista (llamada 'lista2') que uniremos o concatenaremos a la lista demarcaciones de la siguiente manera:

# Concatenamos dos listas
lista2 = ['Arquero', 'Carrilero', 'Portero', 'Lateral']
demarcaciones.extend(lista2)
print demarcaciones

Como resultado de unir estas dos listas tenemos lo siguiente (demarcaciones + lista2):

['Portero', 'Defensa', 'Lateral', 'MedioCentro', 'Centro Campista', 'Extremo', 'Delantero', 'Arquero', 'Carrilero', 'Portero', 'Lateral']

El siguiente método que vamos a proba va a ser "remove(x)" que eliminará el primer elemento 'x' que se encuentre en la lista. En el ejemplo que vemos a continuación borraremos el primer elemento que sea 'Lateral':

# Borramos la primera aparición del elemento 'Lateral' de la lista
demarcaciones.remove('Lateral')
print demarcaciones

Como resultado tenemos el siguiente contenido, que como vemos ha eliminado la primera aparición de 'Lateral' (que se encontraba en tercer lugar), pero no ha eliminado la segunda aparición de 'Lateral' que se encuentra en la última posición:

['Portero', 'Defensa', 'MedioCentro', 'Centro Campista', 'Extremo', 'Delantero', 'Arquero', 'Carrilero', 'Portero', 'Lateral']

Otro método de borrado es el método "pop(pos)" que elimina el elemento que se encuentra en la posición 'pos' que se pasa como parámetro. Como vemos en el siguiente ejemplo, borraremos el elemento que se encuentra en la tercera posición (el elemento 'MedioCentro'). Dado que las listas empiezan a enumerarse por '0' para borrar el tercer elemento, debemos de pasarle como parámetro un '2':

# Borramos en tercer elemento de la lista PD: las lista empiezan en el elemento 0
demarcaciones.pop(2)
print demarcaciones

Como resultado tenemos que nos ha eliminado la tercera posición; es decir, a borrado 'MedioCentro'

['Portero', 'Defensa', 'Centro Campista', 'Extremo', 'Delantero', 'Arquero', 'Carrilero', 'Portero', 'Lateral']

El siguiente método que vamos a ver es el método "index(x)" que nos devolverá la posición del primer elemento 'x' de la lista. Si buscamos el valor 'Extremo' en la lista nos devolverá como resultado '3' (que corresponde a la cuarta posición):

# Buscamos la posición del primer elemento con valor = 'Extremo'
print demarcaciones.index('Extremo')

El método "count(x)" nos va a devolver el número de veces que esta el elemento 'x' en la lista. A continuación vemos un ejemplo en el que vamos a contar el numero de veces que aparecen los elementos 'Portero' y 'Delantero' respectivamente:

# Vemos el número de veces que esta en la lista el elemento 'Portero' y 'Delantero'
print demarcaciones.count('Portero')
print demarcaciones.count('Delantero')

Como resultado tenemos que el elemento 'Portero' esta 2 veces y el elemento 'Delantero' esta solo una vez:

2
1

Para invertir la lista tenemos el método "reverse()". Veamos un ejemplo de como invertiríamos la lista:

# Invertimos los elementos de las lista
demarcaciones.reverse()
print demarcaciones

Como resultado tenemos la lista invertida:

['Lateral', 'Portero', 'Carrilero', 'Arquero', 'Delantero', 'Extremo', 'Centro Campista', 'Defensa', 'Portero']

Para hacer una copia de una lista, se puede hacer utilizando el método "copy" aunque para ello deberiamos hacer previamente un "import copy". Para hacerlo mucho más sencillo y para no tener que importarnos ninguna libreria extra, las copias de una lista las haremos de la siguiente manera:

# Hacemos una copia de la lista demarcaciones
copiaDemarcaciones = demarcaciones[:]
print 'Copia %s' %copiaDemarcaciones

Lo que estamos haciendo es copiar en la variable 'copiaDemarcaciones' el contenido de toda la lista ( [ : ] ) 'demarcaciones'. En esta caso y a diferencia de otros lenguajes como Java, no estamos haciendo una referencia a una lista, sino que estamos haciendo una copia de la lista; es decir que si manipulamos la lista 'copiaDemarcaciones' (borrado, insert, reverse, …) esta no afectará a la lista 'demarcaciones' ya que son copias en memoria y no referencias. Como resultado del fragmento de código anterior (la copia) tenemos lo siguiente:

Copia ['Lateral', 'Portero', 'Carrilero', 'Arquero', 'Delantero', 'Extremo', 'Centro Campista', 'Defensa', 'Portero']

Para borrar todos los elementos de una lista se puede utilizar el método "remove()" aunque es mejor hacer un borrado de la lista de la siguiente forma:

# Borramos todos los elementos de la lista 'copiaDemarcaciones'
del copiaDemarcaciones[:]
print copiaDemarcaciones

En este caso vamos a borrar el contenido de la lista 'copiaDemarcaciones' y vemos que como resultado tenemos una lista sin elementos:

[]

Por último vamos a ver uno de los métodos más interesantes de las lista, que es el método de ordenación "sort()". Abtrayéndonos del algoritmos que utiliza para hacer la ordenación de la lista (quicksort, inserción directa, método de la burbuja, etc.), el método "sort()" permite ordenar la lista en orden (alfabético, numérico, etc.) tanto en un sentido como en otro.

Vamos a pasar a poner un ejemplo y a ordenar alfabeticamente la lista. Para ello hacemos lo siguiente:

# Ordenamos la lista demarcaciones por orden alfabético
demarcaciones.sort()
print demarcaciones

Como resultado tenemos la lista ordenada en orden alfabetico:

['Arquero', 'Carrilero', 'Centro Campista', 'Defensa', 'Delantero', 'Extremo', 'Lateral', 'Portero', 'Portero']

EL método "sort()" permite pasarle una serie de parámetros para la ordenación, ya que si en la lista tuviesemos objetos en vez de datos atómicos, esta la ordenase por algún atributos del objeto. En este tutorial no vamos a entrar en ese detalle y solo vamos a ver como ordenar la lista en sentido inverso pasándole el parámetro 'reverse = True|False'. Veamos el ejemplo:

demarcaciones.sort(reverse=True)
print demarcaciones

Vemos que como resultado tenemos la lista ordenada en orden alfabético pero en sentido inverso: 

['Portero', 'Portero', 'Lateral', 'Extremo', 'Delantero', 'Defensa', 'Centro Campista', 'Carrilero', 'Arquero']

Veamos otro ejemplo de ordenación de listas, pero en este caso con números en vez de con palabras. En el siguiente fragmento de código vamos a ver como se ordenaría la 'listaNumero' tanto de forma ascendente como descendente:

print '\n\n*******    Ordenación de listas    ******'
listaNumero = [5,2,9,1,12,6,8,3,4]

print 'Lista Desordenada'
print listaNumero

print 'Lista ordenada de forma ascendente (Aqui da igual pasarle "reverse=False" como parámetro)'
listaNumero.sort(reverse=False)
print listaNumero

print 'Lista ordenada de forma descendente'
listaNumero.sort(reverse=True)
print listaNumero

Como resultado tenemos lo siguiente:

*******    Ordenación de listas    ******
Lista Desordenada
[5, 2, 9, 1, 12, 6, 8, 3, 4]
Lista ordenada de forma ascendente (Aqui da igual pasarle "reverse=False" como parámetro)
[1, 2, 3, 4, 5, 6, 8, 9, 12]
Lista ordenada de forma descendente
[12, 9, 8, 6, 5, 4, 3, 2, 1]

Para saber más sobre la ordenación de listas en Python, ver el siguiente tutorial: "Ordenar listas en Python, con ejemplos"

Comparte esta entrada en:
Safe Creative #1401310112503
List en Python, con ejemplos por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies