Introducción rápida
range() genera una secuencia de enteros que normalmente usamos en for. Acepta sólo enteros y devuelve un objeto range (), definido por range(start, stop, step).
- start: opcional, comienzo (por defecto 0)
stop: límite (no incluido)step: salto entre valores (por defecto 1)
Ejemplo 1 — caso simple
Explicación línea por línea de código
for i in range(3):
range(3) genera la secuencia 0, 1, 2 (el stop es 3, no incluido).
El for itera sobre esa secuencia; en cada vuelta i toma uno de los valores: primero 0, luego 1, luego 2.
print(i, end=» «)
print(i) muestra el valor actual de i.
El argumento end=» « cambia el final por defecto de la línea (que es «\n») por un espacio. Por eso los números saldrán separados por espacios en la misma línea.
Salida que se verá en consola:
(Nota: hay un espacio final por el end=» «.)
Ejemplo 2 — rango con paso negativo
Explicación línea por línea de código
for i in range(6, 1, -2):
start = 6, stop = 1, step = -2.
La secuencia creada será: 6, 4, 2.
Importante: stop no se incluye; con step negativo el rango genera valores mientras current > stop. En este caso tras 2 vendría 0, pero como 0 <= stop(1) se para antes.
print(i, end=» «)
Igual que antes, imprime cada i en la misma línea separados por espacios.
Salida
(En un modo estándar habría comas para separar números; la salida real con print(..., end=" ") usa espacios.)
Comportamientos y trucos prácticos de range()
- range devuelve un objeto que es iterable y no construye inmediatamente una lista completa (eficiente en memoria). Si quieres la lista explícita: list(range(…)).
- range acepta sólo enteros; pasar floats produce TypeError.
- Si step es positivo, la secuencia avanza mientras current < stop. Si step es negativo, avanza mientras current > stop.
- range(0) o range(5,5) produce una secuencia vacía.
- Se puede obtener len(range(…)), indexar (range(…)[2]) y usar in para comprobar pertenencia (p. ej. 5 in range(10) → True).
- Para generar índices: for i in range(len(lista)): — útil cuando necesitas el índice. Pero si solo necesitas los elementos, for elemento in lista: es más «pythonic».
- Para obtener índice y elemento a la vez: for idx, elem in enumerate(lista):
Aplicaciones prácticas en el flujo Revit Open Source Converter
1) Crear niveles (niveles numerados con altura constante)
Explicación línea por línea de código
num_plantas = 5 → número total de pisos que queremos crear.
altura_plantilla_mm = 3000 → altura por planta en milímetros.
for nivel in range(1, num_plantas + 1): → range(1, 6) genera 1..5; iteramos por cada planta.
z_mm = nivel * altura_plantilla_mm → calculamos la elevación del nivel.
crear_nivel(…) → función que crea el nivel en el modelo Revit (placeholder para la implementación real).
2) Recorrer niveles de arriba hacia abajo (paso negativo)
range(num_plantas, 0, -1) genera 5, 4, 3, 2, 1. Útil si necesitas procesar del ático a la planta baja.
3) Procesar elementos en lotes (batch export)
Explicación
range(0, len(elementos), tamano_lote) produce índices 0, 100, 200, … hasta len. Cada valor es la posición de inicio del lote.
lote = elementos[inicio : inicio + tamano_lote] crea el subgrupo a exportar.
Muy útil para evitar procesar miles de elementos a la vez y controlar memoria / tiempos.
Buenas prácticas
Stop no se incluye — es la fuente de muchos errores de novato.
Cuando uses range para índices en arrays que pueden cambiar de tamaño, conviértelos a lista primero (els = list(collector)), para evitar inconsistencias si el origen es lazy.
Bonus: range() combinado con enumerate()
A veces necesitas índice y elemento a la vez. Podrías usar range(len(lista)), pero hay una forma más pythonic: enumerate().
Explicación:
enumerate(muros, start=1) devuelve pares (índice, elemento) comenzando en 1.
idx es el número de orden, muro es el diccionario/objeto.
Muy útil para mostrar progreso durante un batch export en el Open Source Converter.








@Yolanda Muriel 