Iterando con listas
Veamos si podemos resolver otro tipo de problemas a través de los cuales expresarnos cíclicamente, pero también obtener algunas respuestas interesantes.
Resulta que en Python, así como en cualquier otro lenguaje de programación, es útil tener una lista de valores, porque vamos a poder trabajar con más y más datos, con conjuntos de datos cada vez más grandes.
En el fascinante mundo de la programación, las listas son como "cajas" o contenedores que nos permiten organizar y manejar conjuntos de datos de manera eficiente.
Imaginemos que estamos creando un programa para gestionar el inventario de una ferretería. Por ejemplo, comencemos creando un archivo llamado ferreteria.py
en nuestro editor favorito (como VS Code). En este archivo, vamos a definir una lista de piezas:
Creando una lista
En este caso, hemos creado una lista llamada piezas
que contiene tres elementos, tres cadenas (strings), : "tornillo"
, "tuerca"
y "arandela"
, cada una representando un tipo de pieza en nuestra ferretería.
Nuestra lista piezas
es como una caja que contiene tres elementos, y cada elemento es una pieza diferente. Independiente uno de otro, pero juntos en la misma caja. La longitud de la lista es 3, porque tiene tres elementos.
¡Para recordar!
En Python, las listas se definen utilizando corchetes []
, y los elementos de la lista se separan por comas.
Impresión de una lista
En el pasado, cuando imprimíamos una variable, simplemente lo hacíamos referenciando el nombre de esta. Pero, ¿qué pasa si ahora para imprimir hacemos referencia al nombre de la lista? ¿Cómo se verá en la consola?
# Lista de piezas
piezas = ["tornillo", "tuerca", "arandela"]
# Imprimiendo la lista
print(piezas)
En este caso, estamos imprimiendo la lista
piezas
en la consola. Como resultado, obtenemos una representación de la lista entre corchetes[]
, con cada elemento de la lista separado por comas y entre comillas simples'
.
Seguramente no nos sirva demasiado imprimir de esta manera. Tal vez queramos imprimir primero el tornillo, luego la tuerca y por último la arandela.
Entonces, necesitaremos una forma de poder acceder a cada elemento de la lista con mayor precisión.
Accediendo a los elementos de una lista
Para acceder a elementos específicos de la lista, usamos índices. En Python, los índices comienzan en 0 y no en 1:
# Lista de piezas
piezas = ["tornillo", "tuerca", "arandela"]
# Accediendo a elementos de la lista
print(piezas[0]) # tornillo
print(piezas[1]) # tuerca
print(piezas[2]) # arandela
En este caso, estamos accediendo a cada uno de los elementos de la lista
piezas
utilizando sus índices:0
,1
y2
.Una vez que accedemos a un elemento de la lista, podemos realizar cualquier operación con él, como imprimirlo en la consola.
¡Para recordar!
En Python, y en general en cualquier lenguaje de programación, los índices comienzan en 0.
Por lo tanto, el primer elemento de la lista tiene un índice de 0
, el segundo elemento tiene un índice de 1
, y así sucesivamente.
La eficiencia de los bucles
Pero, ¿qué pasa si nuestro inventario crece y tenemos docenas de tipos de piezas? ¿O si no sabemos de antemano cuántas piezas tenemos? Tiene que haber una mejor manera de poder imprimir cada pieza sin tener que escribir una línea de código por cada una de ellas.
Así es. No queremos escribir una línea de código por cada pieza. Aquí es donde los bucles entran en juego:
# Lista de piezas
piezas = ["tornillo", "tuerca", "arandela"]
# Iterando sobre la lista
for p in piezas:
print(p)
En este caso, estamos utilizando un bucle
for
para iterar sobre cada elemento de la listapiezas
.Este bucle recorre automáticamente cada elemento de la lista
piezas
, asignándolo a la variablep
en cada iteración.No necesitamos saber cuántos elementos hay en la lista, ni cuáles son. El bucle
for
se encarga de recorrer la lista y realizar una acción en cada elemento.
Como podemos ver, el bucle
for
nos permite recorrer cada elemento de la listapiezas
y realizar una acción en cada uno de ellos, en este caso, imprimir el nombre de la pieza.
Nombrando variables con sentido
Observa cómo se han nombrado las variables. No están del todo mal, pero tampoco del todo bien.
En lugar de usar nombres crípticos como p
o _
, debemos usar nombres descriptivos como pieza
. Esto hace que nuestro código sea más legible y comprensible, como etiquetar claramente nuestras cajas de herramientas.
# Lista de piezas
piezas = ["tornillo", "tuerca", "arandela"]
# Iterando sobre la lista
for _ in piezas:
print(_)
El programa funciona perfectamente utilizando guión bajo
_
, la variable de descarte o placeholder, y aunque podríamos utilizarlo sin problemas, volvería nuestro código muy críptico, complicando la claridad y legibilidad del código.
¡Para recordar!
Es importante nombrar nuestras variables de manera descriptiva y significativa. Esto hace que nuestro código sea más legible y comprensible para nosotros y para otros desarrolladores. Nombra, etiqueta tus variables de manera que reflejen su propósito y su función en el programa. Llama a tus variables por lo que son.
Entonces, un nombre muy apropiado, aunque estoy seguro de que se te pueden ocurrir otros, sería pieza
. Si prefieres ser más sucinto, no es descabellado hacer algo sucinto en un bucle como este, como por ejemplo llamar a la variable s
, usar la misma letra con la que comienza la lista, pero recuerda que Python está pensado para ser más legible. Si tienes una lista de piezas
, itera sobre ellos una pieza
a la vez:
# Lista de piezas
piezas = ["tornillo", "tuerca", "arandela"]
# Iterando sobre la lista
for pieza in piezas:
print(piezas)
Ahora si, el código es más legible y comprensible. La variable
pieza
refleja claramente su propósito y función en el programa.
La flexibilidad de Python
Una de las ventajas de Python es su flexibilidad. El mismo bucle for
que usamos para recorrer números puede usarse para recorrer cualquier tipo de secuencia, incluyendo listas de strings. Podríamos usarlo para contar tornillos o para listar diferentes tipos de arandelas.
# Lista de tornillos
tipos_tornillos = ["autorroscante", "cabeza plana", "hexagonal"]
# Iterando sobre la lista
for tipo in tipos_tornillos:
print(f"tornillo {tipo}")
Con esta técnica, podemos manejar inventarios de cualquier tamaño, ya sea que tengamos 3 tipos de piezas o 300 tipos de piezas.
La magia de la programación está en crear soluciones que sean adaptables y eficientes, como un buen sistema de organización en una ferretería bien gestionada.
Puedes llevar este ejemplo a cualquier situación que requiera manipular colecciones de datos estructurados, como una lista de contactos, una lista de tareas pendientes, una lista de productos, etc.