Python / range() / Criar inteiros consecutivos ou espaçados regularmente
Em Python, range() cria uma sequência imutável de inteiros espaçados regularmente. Inclui o início e exclui o limite stop; o sinal de step escolhe a direção. É diferente de uma lista com todos os valores e de um gerador consumido durante a iteração.
Regras de start, stop e step
A referência de range descreve range(stop), range(start, stop) e range(start, stop, step). Os padrões são início zero e passo um. Os argumentos precisam ser inteiros ou oferecer o protocolo de índice inteiro; floats comuns e strings numéricas não são convertidos automaticamente.
Use Python 3. Salve cada exemplo completo em UTF-8 como range_example.py e execute python range_example.py, ou python3 conforme sua instalação. Substitua o conteúdo para executar cada exemplo separadamente. Para intervalos pequenos, list() mostra todos os valores.
print(list(range(4)))
print(list(range(1, 6)))
print(list(range(1, 10, 2)))
Resultado esperado:
[0, 1, 2, 3]
[1, 2, 3, 4, 5]
[1, 3, 5, 7, 9]
range(4) vai de zero a três; range(1, 6), de um a cinco. Para incluir cinco com passo crescente de um, use stop seis. Com passo dois, o último valor não precisa ser stop menos um: deve satisfazer espaçamento e limite.
Passos negativos e intervalos vazios
Passos positivos incluem valores menores que stop; negativos incluem valores maiores. Para descer, escolha um passo negativo. Se a direção não combinar com os limites, o resultado é vazio em vez de um erro.
print(list(range(10, -5, -3)))
print(list(range(5, 0, -1)))
print(list(range(5, 0)))
print(list(range(0, 5, -1)))
print(list(range(3, 3)))
[10, 7, 4, 1, -2]
[5, 4, 3, 2, 1]
[]
[]
[]
range(10, -5, -3) produz 10, 7, 4, 1, -2. O próximo, -5, é igual a stop e fica excluído. Use range(5, 0, -1) para descer de cinco a um. Início e fim iguais também geram um intervalo vazio, cujo corpo de loop nunca é executado.
Índices e iteração sem lista
Imprimir um range mostra sua representação, não todos os elementos. Ele calcula valores com base nos limites e passo e permite comprimento, índices, fatias e testes de pertencimento. Por ser imutável, não aceita substituir elementos por atribuição a índices.
numbers = range(2, 10, 2)
print(numbers)
print(len(numbers))
print(numbers[0], numbers[-1])
print(list(numbers[1:3]))
print(6 in numbers, 7 in numbers)
print(list(numbers))
print(list(numbers))
range(2, 10, 2)
4
2 8
[4, 6]
True False
[2, 4, 6, 8]
[2, 4, 6, 8]
Converter duas vezes o mesmo range em lista produz os mesmos elementos. O range não é um gerador que se esgota. Um iterador separado criado com iter(numbers) é consumido; diferencie-o da sequência. Uma fatia também retorna range, convertido em lista no exemplo para inspeção.
Passo zero, floats e strings geram erros
Passo zero não define avanço e causa ValueError. 3.0 continua sendo float apesar do valor inteiro; "3" é string. Ambos causam TypeError.
for arguments in ((1, 5, 0), (3.0,), ("3",)):
try:
print(range(*arguments))
except (ValueError, TypeError) as error:
print(type(error).__name__)
ValueError
TypeError
TypeError
Se texto inteiro for uma entrada aceita, valide e converta separadamente com int(). Truncar floats indiscriminadamente pode criar um intervalo inesperado; defina primeiro a política de entrada. As exceções aqui comparam entradas incorretas, sem tratar falhas silenciosamente como sucesso.
Escolher range ou enumerate no loop
Um loop com range serve para quantidade fixa ou passos inteiros. Percorra diretamente a lista quando só precisar dos elementos. Para itens numerados, enumerate() evita cálculos manuais de índices.
for number in range(1, 4):
print("Step", number)
names = ["Ada", "Bo"]
for number, name in enumerate(names, start=1):
print(number, name)
Step 1
Step 2
Step 3
1 Ada
2 Bo
O primeiro loop tem três passos, de um a três. No segundo, start=1 muda a numeração sem pular o primeiro item. range(len(items)) continua útil quando índices reais ou cálculos de posição são necessários.
Intervalos enormes e recursos reais
Um range representa limites grandes sem guardar a lista inteira, mas não elimina o tempo de visitar cada valor. Em CPython, o limite de representação do comprimento em len() pode causar OverflowError mesmo quando é possível criar o intervalo.
import sys
numbers = range(sys.maxsize + 1)
print(numbers[0])
print(numbers[-1] == sys.maxsize)
try:
print(len(numbers))
except OverflowError:
print("OverflowError")
0
True
OverflowError
O exemplo verifica apenas extremos e erro de comprimento, sem percorrer a sequência. sys.maxsize varia conforme o ambiente. Evite materializar intervalos enormes com list(); percorra somente a parte necessária ou processe os resultados gradualmente.




