Header Ads Widget

Ticker

6/recent/ticker-posts

Cómo crear una lista en Python: bucles, comprensiones y más

Si está trabajando con Python por primera vez, es posible que le interese aprender a almacenar datos. Por ejemplo, es posible que desee recopilar una lista de calificaciones de exámenes para poder promediarlas. Si es así, la estructura de datos de la lista hace el trabajo. Pero, ¿cómo se crea una lista en Python? Ese es el tema del artículo de hoy.

Resulta que hay algunas formas diferentes de crear una lista. En primer lugar, podría crear una lista directamente de la siguiente manera:  my_list = [0, 1, 2]Alternativamente, podríamos construir esa misma lista con una lista por comprensión:  my_list = [i for in range(0, 3)]Finalmente, si necesitamos más control, podríamos construir nuestra lista usando un bucle y  append()En el resto de este artículo, veremos cada solución en detalle.

Descripción del problema

Cuando se trata de trabajar con diferentes tipos de datos en Python, es útil tener alguna forma de administrarlos. Afortunadamente, Python admite una estructura de datos fácil de usar para almacenar todo tipo de datos: la lista.

En Python, la lista es una estructura de datos similar a una matriz que es de tamaño dinámico. En otras palabras, no tenemos que preocuparnos por saber cuántos elementos tenemos antes de crear nuestra lista. Para aquellos de nosotros que trabajamos en lenguajes como Java o C, estamos acostumbrados a estar atascados con la siguiente sintaxis:

1
int[] list = new int[10];

Afortunadamente, Python tiene una sintaxis mucho más limpia. Específicamente, tenemos dos opciones:

  1. Crea una lista usando el constructor: my_list = list()
  2. O crea una lista usando una lista vacía: my_list = []

Pero, ¿y si queremos llenar esa lista? Ese es el problema que abordaremos hoy. Afortunadamente, existen varias soluciones.

Soluciones

En este punto, veremos algunas formas de crear una lista en Python. Como siempre, trabajaremos nuestro camino desde soluciones sencillas a soluciones más complejas. Después de eso, compararemos el rendimiento de cada solución. En cualquier caso, ¡sumergámonos!

Crear una lista a mano

Una de las cosas buenas de Python es que podemos crear una lista a mano. En otras palabras, si sabemos cómo queremos poblar la lista, podemos escribir esos contenidos directamente:

1
my_list = ["Crosby", "Malkin", "Letang", "Rust"]

En una línea, logramos crear una variable llamada  my_listLuego, le asignamos una lista literal que contiene algunos jugadores de Penguins.

Ahora, si queremos interactuar con esta lista, podemos hacerlo. Por ejemplo, podríamos obtener cualquiera de la siguiente información:

  • Primer jugador: my_list[0]
  • Último jugador: my_list[-1]
  • Primeros dos jugadores: my_list[:2]
  • Todos los demás jugadores: my_list[::2]

Si está interesado en artículos sobre interacción con listas, he escrito una o dos cosas:

De lo contrario, veamos algunas otras soluciones.

Crear una lista con un bucle

Dado que las listas en Python son dinámicas, en realidad no tenemos que definirlas a mano. En otras palabras, podemos crear una lista vacía y agregarle elementos con un bucle:

1
2
3
my_list = []
for i in range(10):
  my_list.append(i)

En este caso,  my_list solo contendría números pares entre 0 y 9:

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

Del mismo modo, también hay muchas formas diferentes de agregar elementos a las listas. Si está interesado en ese tipo de cosas,  tengo un artículo sobre eso .

Crear una lista con una comprensión de lista

Una de mis formas favoritas de crear una lista es utilizar la función de comprensión de listas. Esencialmente, es una sintaxis de bucle comprimido que nos permite generar listas simples. Por ejemplo, el primer ejemplo de bucle se podría escribir como una lista de comprensión de la siguiente manera:

1
my_list = [i for i in range(10)]

Ahora, en lugar de agregar elementos manualmente a una lista, esta expresión maneja todo el trabajo pesado. Como resultado, podemos enfocarnos en modificar la expresión para hacer cosas divertidas como escalar todos los valores en el rango en 3:

1
my_list = [i * 3 for i in range(10)]

Esta expresión generará una lista similar a la siguiente:

1
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

Si bien estaría feliz de profundizar en todos los detalles,  ya tengo un artículo divertido  e  incluso un video  que cubre la lista de comprensiones en profundidad. Consulte esos recursos si está interesado.

Actuación

Ahora que tenemos algunas soluciones, comparemos su desempeño. Para hacer eso, necesitaremos generar algunas cadenas:

01
02
03
04
05
06
07
08
09
10
11
static = """
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
"""
loop = """
my_list = []
for i in range(10):
  my_list.append(i)
"""
comprehension = """
my_list = [i for i in range(10)]
"""

En este punto, todo lo que tenemos que hacer es importar la  timeit biblioteca, para que podamos comenzar a probar:

1
2
3
4
5
6
7
>>> import timeit
>>> min(timeit.repeat(stmt=static))
0.08311530000000289
>>> min(timeit.repeat(stmt=loop))
1.0872243000000026
>>> min(timeit.repeat(stmt=comprehension))
0.7429419999999993

¡Y ahí lo tienes! La forma más rápida de crear una lista es declararla estáticamente. Dicho esto, si tiene que generar una lista, la comprensión de la lista parece ser el camino a seguir.

Desafío

Ahora que sabe cómo crear una lista, tengo un pequeño desafío para usted:  cree una lista que contenga los primeros 100 términos de la secuencia de Fibonacci . Para los propósitos de este ejercicio, asumiremos que los dos primeros términos son 1 y 1.

No dude en utilizar cualquier solución de este artículo para generar su lista. Por ejemplo, puede calcular los primeros 100 términos a mano y construir su lista estáticamente. Alternativamente, puede optar por utilizar un bucle o  incluso recursividad  para completar su lista.

Si logra generar la lista usando una lista de comprensión, ¡hágamelo saber! No tengo idea de si eso es posible, al menos no sin hacer algunas cosas realmente desagradables. Después de todo, no puede acceder a los elementos de la lista mientras la crea, por lo que sería difícil rastrear los valores anteriores. Dicho esto, es posible que pueda aprovechar el nuevo operador de morsa o algún mecanismo de seguimiento de estado externo.

En cualquier caso, dejaré caer una solución en los comentarios. Si se te ocurre algo diferente, ¡házmelo saber!

Un pequeño resumen

En este punto, hemos llegado al final del artículo. Como siempre, me gusta compartir una lista de todas las soluciones para su lectura:

1
2
3
4
5
6
7
8
# Create a list statically
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Create a list with a loop
my_list = []
for i in range(0, 10, 2):
  my_list.append(i)
# Create a list with a list comprehension
my_list = [i for i in range(10)]

Publicar un comentario

0 Comentarios