Listas, tuplas y sets

Listas

Las listas son colecciones mutables ordenadas de objetos; los objetos pueden ser de distintos tipos o incluso otras listas.

Se declaran con [ ].

Métodos de elementos iterables

Muchos de los métodos descritos a continuación se aplican a otros objetos iterables.

Índices

En Python el primer elemento de un objeto iterable tiene el índice 0, y el último elemento tiene el índice -1. El número de elementos en el objeto se puede obtener con len().

robots = ["HAL", "C3PO", "R2D2", "T1000"]

robots[1]
# 'C3PO'

robots[-1]
# 'T1000'

Slicing

Utilizando : podemos definir segmentos dentro de la lista. lista[x:y] devuelve los elementos ≥x y <y ([x,y))

robots[1:3]
#['C3PO', 'R2D2'] 

Añadir elementos

  • .append() añade un elemento al final de la lista
    • es equivalente a lista[len(lista)] = 'elemento
  • .insert(i,x) inserta x en la posición i
robots.insert(1,"Marvin")
# ["HAL", "Marvin", "C3PO", "R2D2", "T1000"]

Eliminar elementos

  • .remove() elimina el elemento que se le indique:
    • lista.remove('elemento'), o
    • lista.remove(lista[i])
  • .pop() devuelve el último elemento del objeto y lo elimina de la lista
    • acepta índices - .pop(i)
    • .pop(0) devuelve y elimina el primer elemento
  • del list[i] elimina el último elemento sin devolver nada
  • list.clear() borra toda la lista ([])
robots.pop()
# 'T1000'

robots
# ["HAL", "Marvin", "C3PO", "R2D2"]

Ordenar elementos

Modifica la lista Preserva la original Descripción
list.sort() sorted(list) Ordena la lista alfabéticamente
list.reverse() reversed(list) Orden la lista a la inversa
set(list) Devuelve una lista de elementos únicos

Concatenar listas

  • lista1 + lista2, o
  • lista1.extend(lista2)

List comprehension

Es una forma de crear listas concisa que deshecha todas las variables generadas en el proceso. El formato es: [ + expresión + for + (opcionalmente) for/if + ].

squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
# [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

Nested list comprehension

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]

[[row[i] for row in matrix] for i in range(4)]
# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Tuplas

Una tupla es una secuencia ordenada y finita de (elementos; las tuplas son inmutables - una vez declaradas no se pueden modificar).

Las tuplas se definen con paréntesis ( ).

Sets

Los sets son colecciones desordenadas que no contienen duplicados. Realmente es un hashtable.

Se pueden crear utilizando set() o {} - ATENCIÓN: si los corchetes están vacíos no se creará un set sino un diccionario; es mejor utilizar set() para este tipo de operaciones.

La utilidad principal de un set es que iterar a través de ellos es mucho más rapido que iterar dentro de una lista o un diccionario. Para añadir un elemento a un set se utiliza set.add() - tarda el 10% del tiempo que en iterar por una lista.

basket = {'apple', 'orange', 'grape', 'grape', 'grape', 'apple'}
# {'pear', 'apple', 'orange', 'banana'}
words=set('abracadabra pata de cabra')
# {'p', 't', ' ', 'b', 'c', 'd', 'e', 'r', 'a'}