Logo Python Fundamentos de la programación (Python)

[M6] Bucles for (2). range() y enumerate()

En el módulo pasado, usamos el bucle for para iterar sobre una secuencia de elementos: letras de un string, tuplas, listas. En este módulo lo usaremos en conjunto con las funciones range() y enumerate().

El tipo range() es una función incorporada que se utiliza para generar una secuencia de números. En conjunto con el bucle for nos 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.