Dominando a Função range() do Python: Do Básico ao Avançado
Dominando a Função range() do Python: Do Básico ao Avançado
O que é o range() do Python?
A função range() do Python é um gerador nativo que produz uma sequência de inteiros baseada em início, fim e passo opcional. Se o valor inicial for omitido, ele assume 0 por padrão, e a sequência incrementa de 1 até atingir o valor final (exclusivo). Por exemplo, range(5) produz 0, 1, 2, 3, 4. A função é indispensável ao iterar com loops for.
Neste tutorial você aprenderá:
- Definição e sintaxe do
range() - Histórico:
range()vs.xrange() - Como usar
range()com início, fim e passo - Incrementando e decrementando ranges
- Lidando com limites de ponto flutuante e alternativas
- Usando
range()com listas, arrays earange()do NumPy - Padrões avançados: mesclando ranges, extraindo números pares, gerando sequências de alfabeto
Sintaxe
range(inicio, fim, passo)
Parâmetros
- inicio (opcional): O primeiro inteiro da sequência. Default 0 se omitido.
- fim (obrigatório): O limite superior (exclusivo). A para antes deste valor.
- passo (opcional): O intervalo entre valores consecutivos. Default 1.
Valor de Retorno
Retorna um objeto range, que se comporta como uma sequência imutável de inteiros. Quando convertido para lista, exibe a sequência completa.
Histórico: range() vs xrange()
Introduzido no Python 3, range() substituiu o antigo xrange() usado no Python 2. As diferenças principais:
| range() | xrange() |
|---|---|
| Retorna uma sequência imutável de números. | Retorna um objeto gerador. |
| Consome memória proporcional ao comprimento. | Usa memória mínima; gera valores preguiçosamente. |
| Adequado para ranges pequenos a médios. | Preferido para ranges grandes ou sequências infinitas. |
| Mais lento em ranges muito grandes devido à alocação. | Mais rápido ao iterar sobre ranges grandes. |
Usando range()
Exemplo básico que imprime números de 0 a 9:
for i in range(10):
print(i, end=" ")
Saída: 0 1 2 3 4 5 6 7 8 9
Usando início e fim no range()
Especificar um valor inicial desloca a sequência:
for i in range(3, 10):
print(i, end=" ")
Saída: 3 4 5 6 7 8 9
Usando início, fim e passo
Adicionando um passo, você controla o intervalo entre números:
for i in range(3, 10, 2):
print(i, end=" ")
Saída: 3 5 7 9
Incrementando Valores com Passo Positivo
O passo padrão é 1, mas você pode especificar qualquer inteiro positivo:
for i in range(1, 30, 5):
print(i, end=" ")
Saída: 1 6 11 16 21 26
Range Reverso: Decrementando com Passo Negativo
Fornecer um passo negativo cria uma sequência descendente:
for i in range(15, 5, -1):
print(i, end=" ")
Saída: 15 14 13 12 11 10 9 8 7 6
Usando Números de Ponto Flutuante no range()
O range() nativo aceita apenas inteiros. Tentar passar um float levanta TypeError:
for i in range(10.5):
print(i, end=" ")
Saída: TypeError: 'float' object cannot be interpreted as an integer
Usando for-loop com range()
Range é frequentemente combinado com len() para iterar sobre índices de lista:
lista = ['MySQL', 'MongoDB', 'PostgreSQL', 'Firebase']
for i in range(len(lista)):
print(lista[i], end=" ")
Saída: MySQL MongoDB PostgreSQL Firebase
Usando range() como Lista
Converter um range para lista é simples:
print(list(range(10)))
Saída: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Usando Caracteres com range()
Embora range() funcione apenas com inteiros, você pode gerar sequências de alfabeto convertendo caracteres para seus pontos de código Unicode:
def obter_alfabeto(inicio, fim, passo):
for c in range(ord(inicio.lower()), ord(fim.lower()), passo):
yield chr(c)
print(list(obter_alfabeto("a", "h", 1)))
Saída: ['a', 'b', 'c', 'd', 'e', 'f', 'g']
Como Acessar Elementos do Range
Você pode recuperar valores via iteração, indexação ou conversão para lista:
Iteração
for i in range(6):
print(i)
Saída: 0 1 2 3 4 5
Indexação
primeiro = range(5)[0]
print("Primeiro elemento:", primeiro)
segundo = range(5)[1]
print("Segundo elemento:", segundo)
ultimo = range(5)[-1]
print("Último elemento:", ultimo)
Saída: Primeiro: 0, Segundo: 1, Último: 4
Usando list()
print(list(range(10)))
Saída: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Exemplo: Obter Números Pares com range()
Para gerar números pares até 18:
for i in range(2, 20, 2):
print(i, end=" ")
Saída: 2 4 6 8 10 12 14 16 18
Mesclando Duas Saídas de range()
Combinar dois objetos range pode ser feito com itertools.chain:
from itertools import chain
print("Mesclando dois ranges em um")
frange = chain(range(10), range(10, 20, 1))
for i in frange:
print(i, end=" ")
Saída: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Usando range() com NumPy
O arange() do NumPy espelha range() mas suporta passos de ponto flutuante:
Sintaxe
arange(inicio, fim, passo)
Exemplo
import numpy as np
for i in np.arange(10):
print(i, end=" ")
Saída: 0 1 2 3 4 5 6 7 8 9
Range de Ponto Flutuante com NumPy
for i in np.arange(0.5, 1.5, 0.2):
print(i, end=" ")
Saída: 0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998
Como a aritmética de ponto flutuante é binária, a saída às vezes mostra expansões decimais longas. Você pode arredondar os valores conforme necessário.
Resumo
- range() gera uma sequência de inteiros definida por início, fim e passo.
- Introduzido no Python 3; xrange() era seu predecessor no Python 2.
- Use passo positivo para sequências ascendentes, negativo para descendentes.
- Números de ponto flutuante não são suportados; use NumPy arange() para floats.
- Acesse elementos via iteração, indexação ou conversão
list(). - Combine ranges com
itertools.chainou gere sequências personalizadas como alfabetos. - Para ranges numéricos grandes, considere comportamento de gerador para eficiência de memória.
python
- Dominando Argumentos de Funções em Python: Parâmetros Posicionais, Nomeados e Padrão
- Funções Lambda em Python: Guia Prático para Funções Anônimas
- Generators em Python: Iteração Eficiente e Casos de Uso Avançados
- Dominando Funções Lambda em Python: Exemplos Práticos e Boas Práticas
- Função abs() em Python: Calcular Valores Absolutos para Números e Complexos
- Função round() em Python Explicada com Exemplos Práticos
- Dominando a Função range() do Python: Do Básico ao Avançado
- Dominando a Função map() do Python: Sintaxe, Exemplos e Boas Práticas
- Dominando enumerate() do Python: Loop com Índices para Listas, Tuplas, Strings e Dicionários
- Python list.count(): Guia Especializado com Exemplos Práticos