Artículo tras artículo, nuestro maletín de herramientas de Python va cogiendo peso y disponemos de nuevos recursos para afrontar cualquier desafío de programación. En la entrega de hoy hablaremos de la función range(). Si alguien no entiende aún por qué Python es tan especial, que eche una ojeada a esto.
La función range() es muy simple, pero de una potencia tremenda: genera automáticamente una secuencia con una progresión aritmética.
Puede utilizarse con uno, dos o tres parámetros.
Comencemos por su uso básico con uno sólo:
>>> range(5)
range(0, 5)
Este comando, aunque aparente no haber hecho nada, ha generado una secuencia virtual de números enteros ¿No se ve nada?. Para poder hacer de carne y hueso esta secuencia vamos a convertirla en lista con la función list().
>>> list(range(5))
[0, 1, 2, 3, 4]
Ahora sí, ya vemos de qué madera está hecha: se trata de una progresión aritmética de término inicial 0 y final 4, uno menos que el valor del parámetro especificado.
Incluyamos ahora dos parámetros:
>>> list(range(1,8))
[1, 2, 3, 4, 5, 6, 7]
Cuando especificamos dos valores, el primero es el término inicial. El segundo, al igual que en el ejemplo anterior, constituye el término superior no incluido.
Si indicamos tres parámetros, el tercero supone la diferencia de la progresión aritmética (el incremento):
>>> list(range(1,10,2))
[1, 3, 5, 7, 9]
Es decir se trata de una progresión aritmética que comienza en 1, termina en 9 y en la que cada elemento se obtiene sumando 2 al anterior.
Naturalmente, esto también funciona con enteros negativos:
>>> list(range(-3,10))
[-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
El siguiente programa calcula la suma de todos los números naturales desde el 1 hasta el 1000 (incluido):
suma = 0
for n in range(1001):
suma+=n
print(suma)
Si lo ejecutamos, obtenemos:
python capitulo20-1.py
500500
Este otro numera automáticamente los elementos de una lista:
# Esta lista ya nos es familiar
semana=['lunes', 'martes', 'miércoles', 'jueves',
'viernes', 'sábado', 'domingo']
for n in range(len(semana)):
print(n+1, semana[n])
Ejecutémoslo:
python capitulo20-2.py
1 lunes
2 martes
3 miércoles
4 jueves
5 viernes
6 sábado
7 domingo
Observad como, en la función print(), he indicado, como parámetro n+1 para que la numeración comience por 1 y no en 0.
Asimilad la función range() y hacedla vuestra. Cada paso que damos nos acerca al objetivo, que no es otro sino ser capaces de hacer practicamente cualquier cosa utilizando Python.
Javier Montero
Si este artículo te ha parecido interesante y crees que puede ser útil a los demás, considera la posibilidad de compartirlo en tus redes sociales favoritas.
En el programa «capitulo20-2.py», n no esta definida previamente, pero el sistema le otorga un valor «0». Esto es por defecto?
Gracias.
Las variables que recorren el iterable no necesitan ser inicializadas. Lo hacen automáticamente con el primer valor que le otorga el iterable, en este caso 0, que es lo primero que da range.
En este otro caso:
for n in [‘a’, ‘b’, ‘c’]: su primer valor sería ‘a’.
Saludos
Al usar range() en Python 2.x con números muy grandes (como iterar entre millones de números) probablemente devuelva un MemoryError o tarde bastante hasta que se genere la lista con todos los números. Para resolver esto existe xrange() que funciona exactamente igual que range(), solo que en este caso devuelve un iterable que va generando los números según se necesite.
En Python 3 parece que esto ya no hace falta.
Muchas gracias por tu aportación, le da valor al artículo.
Hola, tengo esta lista
**Lista por indice**
{‘PROYECT_ID’: ‘1590’, ‘PROYECTNAME’: ‘supervisa y gana dinero cuernavaca 2-2019’, ‘PROYECT_DATE_START’: ’04-03-2020′, ‘PROYECT_DATE_END’: ’07-09-2021′, ‘USER_RESPONSABLE’: ‘hugo cesar moguel avila’}
{‘PROYECT_ID’: ‘1619’, ‘PROYECTNAME’: ‘supervisa y gana dinero león 2-2019’, ‘PROYECT_DATE_START’: ’04-03-2020′, ‘PROYECT_DATE_END’: ’14-07-2021′, ‘USER_RESPONSABLE’: ‘hugo cesar moguel avila’}
{‘PROYECT_ID’: ‘456’, ‘PROYECTNAME’: ‘mystery shopper volaris méxico semana 2 11 al 17 septiembre 2017’, ‘PROYECT_DATE_START’: ’04-03-2020′, ‘PROYECT_DATE_END’: ’07-01-2021′, ‘USER_RESPONSABLE’: ‘jose roman romero’}
{‘PROYECT_ID’: ‘489’, ‘PROYECTNAME’: ‘mystery shopper volaris méxico semana 4 25 sep al 01 oct 2017’, ‘PROYECT_DATE_START’: ’04-03-2020′, ‘PROYECT_DATE_END’: ’15-10-2020′, ‘USER_RESPONSABLE’: ‘jose roman romero’}
{‘PROYECT_ID’: ‘1774’, ‘PROYECTNAME’: ‘prueba dumie’, ‘PROYECT_DATE_START’: ’04-06-2020′, ‘PROYECT_DATE_END’: ’15-10-2020′, ‘USER_RESPONSABLE’: ‘jesús salazar maldonado’}
{‘PROYECT_ID’: ‘1788’, ‘PROYECTNAME’: ‘el nombre mas grandeel nombre mas grande el nombre mas grande’, ‘PROYECT_DATE_START’: ’04-06-2020′, ‘PROYECT_DATE_END’: ’23-09-2020′, ‘USER_RESPONSABLE’: ‘jose alberto lopez
martínez’}
{‘PROYECT_ID’: ‘386’, ‘PROYECTNAME’: ‘demo upaxer ve’, ‘PROYECT_DATE_START’: ’10-08-2017′, ‘PROYECT_DATE_END’: ’17-09-2020′, ‘USER_RESPONSABLE’: ‘viviana gonzalez solis’}
{‘PROYECT_ID’: ‘1785’, ‘PROYECTNAME’: ‘cotiza test’, ‘PROYECT_DATE_START’: ’13-03-2020′, ‘PROYECT_DATE_END’: ’16-09-2020′, ‘USER_RESPONSABLE’: ‘noel rudecino campillo’}
{‘PROYECT_ID’: ‘449’, ‘PROYECTNAME’: ‘mystery shopper volaris estados unidos y centro america septiembre 2017’, ‘PROYECT_DATE_START’: ’04-03-2020′, ‘PROYECT_DATE_END’: ’15-09-2020′, ‘USER_RESPONSABLE’: ‘jose roman romero’}
{‘PROYECT_ID’: ‘1760’, ‘PROYECTNAME’: ‘encuesta logica entrada-duante’, ‘PROYECT_DATE_START’: ’06-02-2020′, ‘PROYECT_DATE_END’: ’12-08-2020′, ‘USER_RESPONSABLE’: ‘jesús salazar maldonado’}
Y quisiera saber si puedo obtener el solo el valor numérico de proyect_id …. es decir, en la posición 0, extraer el 1590 y guardarlo en una otra variable.
Osease, quisiera extraer el valor numérico del «proyect_id» de cada una de las posiciones, de la 0 hasta el final de la lista, y guardarlo en otra variable.