Python: Estructuras de datos: Listas

Podemos definir una lista vacía y luego agregar elementos o directamente definirla con elementos. Cada elemento puede ser de un tipo diferente incluso otra lista. Para acceder a un elemento debemos indicar su posición (índice) que empieza de cero (0) por la izquierda y de -1 por la derecha.

lista = []

lista2 = [1, "dos", 3.0]

lista
[]

lista2
[1, 'dos', 3.0]

lista2[2]
3.0

lista2[-2]
'dos'

Una ventaja de las listas con respecto a las cadenas es que las listas SI permiten modificar elementos individuales o con slice:

lista = [1, "dos", 3, "cuatro", 5, 6]

lista
[1, 'dos', 3, 'cuatro', 5, 6]

lista[3] = 4

lista
[1, 'dos', 3, 4, 5, 6]

lista[1:3] = [2,9]

lista
[1, 2, 9, 4, 5, 6]

Para obtener partes (slice) de la lista, indicamos desde que elemento hasta que elemento separados por dos puntos(:), el primer indice es incluido pero el segundo no, es decir, lista[2:5], lista desde el elemento 2 hasta el 4, pero no el 5 (siempre empezando del elemento 0). Si omitimos el primer indice queremos indicar desde el primero, si omitimos el segundo indice queremos decir que hasta el último y si omitimos ambos, indicamos la lista entera. Si indicamos valores negativos el orden es desde el último elemento (-1) al primero.

lista2 = [1, "dos", 3.0, 4, 'cadena']

lista2[2:4]
[3.0, 4]

lista2[:4]
[1, 'dos', 3.0, 4]

lista2[:]
[1, 'dos', 3.0, 4, 'cadena']

lista2[-3:]
[3.0, 4, 'cadena']

Como una lista puede contener listas podemos simular matrices:

a = [1,2,3]

b = [4,5,6]

c = [7,8,9]

m = [a,b,c]

m[1][1]
5

m[2][0]
7

Para borrar uno o más elementos usando sus indices usamos del:

a = [1,2,3,4,5,6,7,8,9]

del a[4]

a
[1, 2, 3, 4, 6, 7, 8, 9]

del a[3:6]

a
[1, 2, 3, 8, 9]

Para borrar toda la lista list.clear(), es equivalente a del list[:]:

a = [1,2,3,4,5,6,7,8,9]

a.clear()

a
[]

El método list.pop([i]) elimina el elemento en la posición i y lo devuelve como valor. Si no se indica posición, lista.pop(), se elimina el último elemento de la lista devolviendo su valor.

lista  = [0, 1, 2, 3, 4, 5, 6]

lista.pop(2)
2

lista
[0, 1, 3, 4, 5, 6]

lista.pop()
6

lista
[0, 1, 3, 4, 5]

El método list.remove(x) elimina el primer elemento (en caso de que hubiese más iguales) de la lista cuyo valor sea x. Si no encuentra el valor x se produce un error.

lista  = [0, 1, 2, 3, 3, 4, 5, 6]

lista.remove(3)

lista
[0, 1, 2, 3, 4, 5, 6]

El método list.append(x) añade un item x al final de la lista, es lo mismo que list[len(list):] = [x].

lista = [1,2,3,4,5]

lista.append(6)

lista
[1, 2, 3, 4, 5, 6]

El método list.extend(iterable) extiende la lista añadiendo al final todos los elementos de iterable, equivalente a list[len(list):] = iterable.

lista = [1,2,3,4,5]

nueva = [6,7,8,9]

lista.extend(nueva)

lista
[1, 2, 3, 4, 5, 6, 7, 8, 9]

El método list.insert(i, x) inserta el elemento x antes de la posición i, list.insert(0, x) inserta al principio de la lista y list.insert(len(list), x) es equivalente a list.append(x).

Si el índice indicado i no existe, el elemento se añade al final, es como el método .append.

lista = [1,2,3,6]

lista.insert(0,0)

lista
[0, 1, 2, 3, 6]

lista.insert(4,5)

lista
[0, 1, 2, 3, 5, 6]

lista.insert(-2,4)

lista
[0, 1, 2, 3, 4, 5, 6]

lista.insert(20,9)

lista
[0, 1, 2, 3, 4, 5, 6, 9]

El método list.index(x[, start[, end]]) devuelve la posición en la lista (empezando de cero, principio) del primer elemento cuyo valor sea x, se genera un error (ValueError) si dicho valor no se encuentra.

Los parámetros opcionales start (inicio) y end (final) indican el rango de la lista donde buscar el elemento x, la posición devuelta es relativa a toda la lista no al rango especificado.

["Hola", "mundo", "adios", "mundo"].index("mundo")
1

["Hola", "mundo", "adios", "mundo"].index("mundo",2)
3

El método list.count(x) devuelve el numero de veces que x aparece en la lista.

["Hola", "mundo", "adios", "mundo"].count("mundo")
2

El método list.sort(key=None, reverse=False) ordena los elementos de la lista.

key especifica una función de un argumento que es usada para extraer la clave (key) de comparación por cada elemento de la lista, por ejemplo: key=str.lower. Por defecto el valor es None que compara los elemento directamente.

reverse es un valor booleano que indica que si es True los elementos de la lista son ordenados como si cada comparación fuese inversa.

lista = [50, 20, -10, 45, -35, 0]

lista.sort()

lista
[-35, -10, 0, 20, 45, 50]

lista.sort(reverse=True)

lista
[50, 45, 20, 0, -10, -35]

El método list.reverse() invierte el orden de los elementos de la lista.

lista  = [0, 1, 2, 3, 4, 5, 6]

lista.reverse()

lista
[6, 5, 4, 3, 2, 1, 0]

El método list.copy() devuelve una copia de la lista, es equivalent a list[:].

En los conjuntos (set) no puede haber elementos duplicados, pero en las listas si, por lo que si queremos quitar dupliucados en listas podemos hacer el siguiente truco, que es pasar la lista a conjuntos (que eliminará los duplicados) y de nuevo a lista (ya sin duplicados):

ips1 = ['192.168.1.1', '3.3.3.3', '8.8.8.8', '6.6.6.6', '192.168.1.1']

ips1
['192.168.1.1', '3.3.3.3', '8.8.8.8', '6.6.6.6', '192.168.1.1']

ips1 = list ( set ( ips1 ) )

ips1
['8.8.8.8', '3.3.3.3', '6.6.6.6', '192.168.1.1']
NOTA
Hay que tener en cuenta que los conjuntos (set) al ser una colección desordenada perdemos el orden de la lista al pasar a conjunto, por lo que el orden será diferente una vez eliminados los duplicados.

Más información en: listas y más sobre listas

Podemos ver el uso de colas con deque: colas (deque)

Retro

Lugares

Redes

Sistemas

Varios