Listas

Resumen

Enseñando: 10 min
Ejercicios: 10 min
Preguntas
  • ¿Cómo puedo almacenar múltipes valores?

Objectivos
  • Explicar por qué los programas necesitan colecciones de valores.

  • Escribir programa para crear listas, ordenarlas, dividirlas y modificarlas a través de asignaciones y métodos.

Una lista almacena muchos valores en una única estructura.

pressures = [0.273, 0.275, 0.277, 0.275, 0.276]
print('pressures:', pressures)
print('length:', len(pressures))
pressures: [0.273, 0.275, 0.277, 0.275, 0.276]
length: 5

Usa el índice de un elemento para buscarlo en una lista.

print('elemento cero de pressures:', pressures[0])
print('cuarto elemento de pressures:', pressures[4])
elemento cero de pressures: 0.273
cuarto elemento de pressures: 0.276

Los valores de las listas se pueden reemplazar asignándole un nuevo valor.

pressures[0] = 0.265
print('pressures es ahora:', pressures)
pressures es ahora: [0.265, 0.275, 0.277, 0.275, 0.276]

Agregar elementos a una lista la alarga.

primes = [2, 3, 5]
print('primes inicialmente es:', primes)
primes.append(7)
primes.append(9)
print('primes ahora es :', primes)
primes inicialmente es: [2, 3, 5]
primes ahora es : [2, 3, 5, 7, 9]
teen_primes = [11, 13, 17, 19]
middle_aged_primes = [37, 41, 43, 47]
print('primes es:', primes)
primes.extend(teen_primes)
print('ahora primes es:', primes)
primes.append(middle_aged_primes)
print('finalmente primes es:', primes)
primes es: [2, 3, 5, 7, 9]
primes ahora primes es: [2, 3, 5, 7, 9, 11, 13, 17, 19]
finalmente primes es: [2, 3, 5, 7, 9, 11, 13, 17, 19, [37, 41, 43, 47]]

Ten en cuenta que si bien extend mantiene la estructura “plana” de la lista, agregar una lista a una lista produce el resultado bidimensional: el último elemento en ‘primes’ es una lista, no un entero.

Usa del para remover elementos de una lista.

primes = [2, 3, 5, 7, 9]
print('primes antes de remover el último elemento:', primes)
del primes[4]
print('primes después de remover el último elemento:', primes)
primes antes de remover el último elemento: [2, 3, 5, 7, 9]
primes después de remover el último elemento: [2, 3, 5, 7]

La lista vacía no contiene valores.

Las listas pueden contener valores de diferentes tipos.

goals = [1, 'Create lists.', 2, 'Extract items from lists.', 3, 'Modify lists.']

Las secuencias de caracteres pueden indexarse de la misma manera que las listas.

element = 'carbon'
print('carácter cero:', element[0])
print('tercer carácter:', element[3])
carácter cero: c
tercer carácter: b

Las secuencias de caracteres son inmutables.

element[0] = 'C'
TypeError: 'str' object does not support item assignment

Indexar más allá del final de una colección es un error.

print('El elemento número 99 es:', element[99])
IndexError: string index out of range

Rellena los espacios en blanco

Rellena los espacios en blanco para que el programa produzca el resultado mostrado.

values = ____
values.____(1)
values.____(3)
values.____(5)
print('primera vez:', values)
values = values[____]
print('segunda vez:', values)
primera vez: [1, 3, 5]
segunda vez: [3, 5]

Solución

values = []
values.append(1)
values.append(3)
values.append(5)
print('primera vez:', values)
values = values[1:]
print('segunda vez:', values)

¿Qué tan grande es un corte?

Si ‘low’ y ‘high’ son dos enteros no-negativos, ¿qué tan grande es la lista values[low:high]?

Solución

La lista values[low:high] tiene high - low elementos. Por ejemplo, values[1:4] tiene 3 elementos values[1], values[2], y values[3]. Nota que la expresión sólo funciona si high es menor que la longitud total de valores de la lista.

De Secuencias de caracteres a Listas y Viceversa

Dado esto:

print('cadena a lista:', list('tin'))
print('lista a cadena:', ''.join(['g', 'o', 'l', 'd']))
['t', 'i', 'n']
'gold'
  1. ¿Qué hace list('cadena')?
  2. ¿Qué genera '-'.join(['x', 'y', 'z'])?

Solución

  1. list('cadena') convierte una secuencia de caracteres en una lista que contiene todos los caracteres.
  2. join devuelve una secuencia de caracteres que es una concatenación de cada elemento de la secuencia en la lista y añade un separador entre elementos en la lista. Esto resulta x-y-z. El separador entre los elementos es el que provee el método.

Trabajando con el Final

¿Qué muestra el siguiente programa?

element = 'helium'
print(element[-1])
  1. ¿Cómo interpreta Python un índice negativo?
  2. Si una lista o secuencia de caracteres de N elementos, ¿cuál es el índice más negativo que se puede usar, y qué posición representa este índice?
  3. Si values es una lista, ¿qué hace del values[-1]?
  4. ¿Cómo se puede mostrar todos los elementos sin cambiar values? (Consejo: necesitas combinar cortes e índices negativos.)

Solución

El programa muestra m.

  1. Python interpreta un índice negativo como empezar desde el final (en lugar de empezar desde el inicio). El último elemento es -1.
  2. El último índice que se puede usar con seguridad en una lista de N elementos es el elemento -N, que representa el primer elemento.
  3. del values[-1] remueve el último elemento de la lista.
  4. values[:-1]

Recorriendo una Lista

¿Qué muestra el siguiente programa?

element = 'fluorine'
print(element[::2])
print(element[::-1])
  1. Si escribimos un corte como low:high:stride, ¿qué hace stride?
  2. ¿Qué expresión seleccionaría todos los elementos pares de una colección?

Solución

El programa muestra

furn
eniroulf
  1. stride es el tamaño del paso del corte
  2. El corte 1::2 selecciona todos los elementos pares de una colección: empieza con el elemento 1 (que es el segundo elemento, ya que la indexación empieza en 0), va hasta el final (ya que no se usó end), y usa un paso de 2 (es decir, selecciona cada dos elementos).

Límites de los Cortes

¿Qué muestra el siguiente programa?

element = 'lithium'
print(element[0:20])
print(element[-1:3])

Solución

lithium

Sort y Sorted

¿Qué muestran estos dos programas? Explica la diferencia entre sorted(letters) y letters.sort() en términos simples.

# Programa A
letters = list('gold')
result = sorted(letters)
print('letters es', letters, 'y result es', result)
# Programa B
letters = list('gold')
result = letters.sort()
print('letters es', letters, 'y result es', result)

Solución

El programa A muestra

letters es ['g', 'o', 'l', 'd'] y result es ['d', 'g', 'l', 'o']

El program B muestra

letters es ['d', 'g', 'l', 'o'] y result es None

sorted(letters) devuelve una copia ordenada de la lista letters (la lista original letters permanece sin cambios), mientras que letters.sort() ordena la lista letters en si misma y no devuelve nada.

Copiar (o no copiar)

¿Qué muestran estos dos programas? Explica la diferencia entre new = old y new = old[:] en términos simples.

# Programa A
old = list('gold')
new = old      # asignación simple
new[0] = 'D'
print('new es', new, 'y old es', old)
# Programa B
old = list('gold')
new = old[:]   # asignación de un corte
new[0] = 'D'
print('new es', new, 'y old es', old)

Solución

El programa A muestra

new es ['D', 'o', 'l', 'd'] y old es ['D', 'o', 'l', 'd']

El programa B muestra

new es ['D', 'o', 'l', 'd'] y old es ['g', 'o', 'l', 'd']

new = old crea una referencia a la lista old; new y old apuntan al mismo objeto.

new = old[:], sin embargo, crea una nueva lista new con todos los elementos de la lista old; new y old son dos objetos diferentes.

Puntos Clave

  • Una lista almacena muchos valores en una única estructura.

  • Usa el índice de un elemento para buscarlo en una lista.

  • Los valores de las listas se pueden reemplazar asignando nuevos valores.

  • Agregar elementos a una lista la alarga.

  • Usa del para eliminar elementos de una lista.

  • La lista vacía no contiene valores.

  • Las listas pueden contener valores de diferentes tipos.

  • Las cadenas de caracteres se pueden indexar como listas.

  • Las cadenas de caracteres son inmutables.

  • La indexación más allá del final de la colección es un error.