Fundamentos de la programación (Python)
[M6] Bucles for (2). range() y enumerate()
En el módulo pasado, usamos el
bucle forpara iterar sobre una secuencia de elementos: letras de un string, tuplas, listas. En este módulo lo usaremos en conjunto con las funcionesrange()yenumerate().El tipo
range()es una función incorporada que se utiliza para generar una secuencia de números. En conjunto con elbucle fornos permitirá ejecutar una serie de instrucciones un número determinado de veces.
Contenido
El tipo rango y la función range()
El tipo range representa una secuencia inmutable de números.
Este tipo de variable se genera utilizando la función range().
Cuando se llama a la función range(), esta devuelve un objeto tipo rango que representa una secuencia de números con propiedades similares a una tupla, como la capacidad de ser iterado. La principal ventaja de usar la función range() es que es un iterable que genera los elementos solo en el momento en que realmente los necesita. Esto implica que usa una cantidad de memoria mínima, por muy grande que sea el rango de números que represente.
Si deseamos mostrar por pantalla la secuencia completa que se genera con una función range(), si ésta no es utilizada junto con un bucle for, se guarda el resultado de la secuencia en una lista, ya que de hacerlo en un tipo rango lo que se guarda es la instrucción para generar la secuencia.
La sintaxis básica de la función range() es la siguiente:
range(inicio, fin, incremento)
Donde:
| inicio | opcional | Es el valor inicial de la secuencia. Si se omite, su valor es 0 |
| fin | obligatorio | Es el valor final de la secuencia, Python genera hasta el valor anterior al introducido en este argumento. |
| incremento | opcional | Representa el incremento entre los valores de la secuencia. Por defecto, es 1 |
Para guardar un objeto tipo rango se usa la siguiente sintaxis:
variable_tipo_rango = range(inicio, fin, incremento))
Y para convertir un objeto tipo rango en lista, se usa la siguiente sintaxis:
variable_tipo_lista = list(range(inicio, fin, incremento))
Ejemplos:
pares = list(range(2, 11, 2))
print (pares)
>> (2, 4, 6, 8, 10)
unidades = list(range(10))
print (unidades)
>> (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
descendente = list(range(25, 4, -5))
print (descendente)
>> (25, 20, 15, 10, 5)
Operaciones con el tipo range
El tipo range permite utilizar el método count() e index() así como las operaciones básicas de los iterables, a excepción de la concatenación y la repetición
Ejemplo:
rango = range(2, 11, 2)
print ('Elementos en rango: ', rango.count()
>>> Elementos en rango: 5
print ('Elemento en la posición 3: ', rango[2]
>>> Elementos en la posición 3: 6
print ('Posición del numero 10 en rango: ', rango.index[10]
>>> Posición del numero 10 en rango: 4
El bucle for en conjunto con la función range()
El bucle for es una estructura de control muy poderosa que nos permite tanto iterar sobre una secuencia de elementos como, en conjunto con la función range() repetir una acción un número específico de veces. Por ejemplo, en el caso de las siguientes instrucciones:
for numero in range(10):
print numero
El bucle for recorre cada valor de la secuencia generada por la función range() y lo asigna a la variable numero. Luego, el valor de numero se imprime en la consola.
Otros ejemplos:
for numero in range(2, 11, 2):
print numero
# Inicio = 2 , Fin = 11, Incremento = 2
# Imprime 2, 4, 6, 8, 10
suma = 0
for numero in range(5):
suma += numero
print('suma:', suma)
# Inicio = 0 , Fin = 5, Incremento = 1
# 0, 1, 3, 6, 10 (el valor de numero se acumula en cada vuelta)
# suma: 10
for numero in range(25, 4, -5):
print numero
# Inicio = 25 , Fin = 4, Incremento = -5
# 25, 20, 15, 10, 5
Bucles for anidados
Se habla de bucles anidados cuando un bucle se encuentra en el bloque de instrucciones de otro bloque. Al bucle que se encuentra dentro del otro se le puede denominar bucle interior o bucle interno. El otro bucle sería el bucle exterior o bucle externo.
Los bucles anidados permiten trabajar con listas de dos dimensiones (matrices) o realizar dibujos básicos en pantalla.