PyQuiz 20 - range() parámetros en Python | Quiz interactivo

PyQuiz 20 – range() parámetros en Python

El reto

numeros = list(range(10, 0, -2))
print(numeros)

¿Cuál es el resultado?

  • a) [10, 8, 6, 4, 2, 0]
  • b) [10, 8, 6, 4, 2]
  • c) [8, 6, 4, 2, 0]

Piensa tu respuesta antes de seguir leyendo…


Concepto: range() parámetros

La función range(inicio, fin, paso) genera una secuencia de números que comienza en inicio, avanza de paso en paso y se detiene antes de llegar a fin. Este comportamiento de exclusión del límite final es consistente con el slicing y otras convenciones de Python.

Cuando el paso es negativo, la secuencia desciende. Para que genere valores, inicio debe ser mayor que fin. Si el paso negativo hace que se alcance o cruce el límite inferior, la secuencia se detiene sin incluirlo.

En range(10, 0, -2), la secuencia empieza en 10 y resta 2 en cada paso: 10, 8, 6, 4, 2. El siguiente valor sería 0, que es el límite y queda excluido. Por tanto, el 0 nunca aparece.

Paso a paso

  1. range(10, 0, -2) — el rango empieza en 10, tiene límite inferior 0 (excluido) y paso -2.
  2. Generación de valores: 10 (10 > 0, incluir), 8 (8 > 0, incluir), 6 (6 > 0, incluir), 4 (4 > 0, incluir), 2 (2 > 0, incluir), 0 (0 > 0 es False, parar).
  3. numeros = list(range(10, 0, -2)) — convierte el rango a lista: [10, 8, 6, 4, 2].
  4. print(numeros) — se imprime [10, 8, 6, 4, 2]. El 0 no aparece porque el límite es exclusivo.

Solución

Respuesta correcta: B) [10, 8, 6, 4, 2]

range(10, 0, -2) empieza en 10, baja de 2 en 2, y se detiene ANTES de llegar a 0. Resultado: [10, 8, 6, 4, 2].

Sabías que…

range() es un objeto de tipo range, no una lista. Ocupa memoria constante independientemente de cuántos números genere. Solo al convertirlo con list() se materializan todos los valores.

import sys

# range es eficiente en memoria
r = range(0, 1_000_000)
print(sys.getsizeof(r))         # ~48 bytes, siempre!
print(sys.getsizeof(list(r)))   # ~8 MB

# range con paso positivo
print(list(range(0, 10, 3)))   # [0, 3, 6, 9]

# Verificar si un número está en range (O(1), muy rápido)
print(500_000 in range(0, 1_000_000, 2))  # True

# range con un solo argumento: empieza en 0
print(list(range(5)))  # [0, 1, 2, 3, 4]

Prueba tú mismo

¿Qué genera list(range(5, 20, 3))? Inténtalo en papel: ¿cuántos elementos tiene la lista resultante?


Más PyQuizzes en elpythonista.com/pyquizzes

Tutorial relacionado: Rangos y enumerate en Python

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicar un comentario