Learning Hub Logo

Sobre Diego Pinho

Professor especialista em tecnologia com mais de 10 anos de experiência. Autor de livros técnicos e criador de cursos que já impactaram milhares de estudantes.

Visite meu site principal →

Serviços

  • Área do Aluno
  • Consultoria Personalizada
  • Cursos Completos
  • Trabalhe Conosco

Redes Sociais

  • Youtube
  • TikTok
  • Instagram
  • LinkedIn

Links

  • Nosso Blog
  • Learning Hub
  • Cursos Online
  • Livros Publicados

Professor Diego Pinho

Educação, Tecnologia e IA © 2026

Python›Ranges

Ranges

O que são e como funcionam os ranges em Python.

📖4 min de leitura

Aprendemos nas últimas lições sobre as coleções do Python, que são muito úteis para guardar múltiplos valores.

Além delas, existe o tipo range. Ele tem um funcionamento parecido com o das coleções, mas possui algumas características que o tornam único.

O que é um range

Um range representa uma sequência imutável de números inteiros. Ele define um intervalo numérico que tem uma estrutura bem clara: início, fim e passo em que seus itens aumentam ou diminuem.

Quando ele é criado, o Python não gera todos os números de uma vez. Em vez disso, ele cria um objeto que guarda apenas as regras do nosso intervalo:

1intervalo = range(0, 5, 1) 2 3print(intervalo) 4 5# Saída: 6# range(0, 5)

Esse funcionamento é seu principal diferencial, fazendo com que ele seja muito eficiente, econômico em memória e ideal para representar sequências numéricas previsíveis quando não precisamos visualizar cada um de seus itens.

Outra característica importante é que ele é imutável, ou seja, ele não pode ser alterado depois de criado. Dessa forma, não conseguimos adicionar, remover ou modificar valores dentro dele. Então, se você precisar de algo diferente, será necessário criar um novo intervalo com novas regras.

Se quiser confirmar se um valor é do tipo range, você pode fazer da seguinte forma:

1intervalo = range(0, 5, 1) 2 3print(type(intervalo)) 4 5

Criando um range

Para funcionar, o range precisa ter as informações que vimos lá no início dessa lição: início, fim e passo em que seus itens aumentam ou diminuem.

Eles aparecem sempre nessa ordem:

1range(inicio, fim, passo)

Apesar dessas três informações serem necessárias, você não precisa sempre fornecer todas elas. Quando alguma não é fornecida, o valor padrão dela é utilizado para criar o intervalo.

Na prática, você pode usar a função passando uma, duas ou três informações:

  1. range(fim)
  2. range(inicio, fim)
  3. range(inicio, fim, passo)

Agora, vamos nos aprofundar em como cada uma dessas alternativas funciona.

Definindo apenas o fim

Quando passamos apenas um valor, ele representa o fim da sequência: range(fim). Nesse caso, o início assume automaticamente o valor 0 e o passo, o valor 1.

Dessa forma, o intervalo gerado vai do 0 até o número anterior ao fim, o 4:

1intervalo = range(5) # equivale a range(0, 5, 1) 2 3print(intervalo) 4print(list(intervalo))

Repare que o valor final, o 5, não é incluído. Um range sempre para antes do valor final, então ele parou antes de 5, indo até o número 4. Para ir até o número 5, devemos usar a função range(6).

Definindo o início e fim

Também podemos definir explicitamente onde a sequência começa e onde termina. Nesse caso, informamos range(inicio, fim):

1intervalo = range(2, 6) # equivale a range(2, 6, 1) 2 3print(intervalo) 4print(list(intervalo

Assim como quando passamos só uma das informações, aqui o passo automaticamente recebe o valor 1 também.

Definindo início, fim e passo

O terceiro valor que podemos passar para o range() define o passo, ou seja, de quanto em quanto os valores avançam. O formato a ser informado é: range(inicio, fim, passo).

Observe:

1intervalo = range(1, 10, 2) 2 3print(intervalo) 4print(list(intervalo

Acima, o passo definido foi 2. Então os números vão aumentando de 2 em 2.

Também é possível usar passos negativos, como -1, para criar sequências decrescentes:

1intervalo = range(5, 0, -1) 2 3print(intervalo) 4print(list(

Repare que, com o passo negativo, o início guarda o número maior e fim guarda o número menor.

Outra opção é deixar o usuário escolher qual será o início, fim e passo:

1inicio = int(input("Qual é o primeiro número da sequência?")) 2fim = int(input("Qual é o último número da sequência?")) 3passo = int(

Não esqueça que o tipo de dado recebido pelo input() sempre é str. Como o range() só aceita valores do tipo int, precisamos converter a string para o tipo numérico inteiro com a função int().

Relação entre range e list

Você deve ter percebido nos exemplos acima que, para visualizar todos os itens de cada range, nós o convertemos para o tipo list, dessa forma:

1intervalo = range(3, 8) 2 3print(list(intervalo)) 4 5# Saída:

Essa conversão cria uma lista na memória contendo todos os valores do range. Porém, é importante ressaltar que ele não precisa ser convertido para outro formato para ser útil e que ele não é nem uma lista nem uma coleção tradicional. Ele é um objeto iterável.

Como já vimos, seu principal diferencial é exatamente representar uma sequência de números inteiros sem armazenar cada um dos números diretamente na memória, como a lista faz. Abaixo, você vai vê-lo sendo utilizado sem a conversão.

Acessando valores por índice

O range é uma sequência, então podemos acessar seus valores usando índices, assim como em listas:

1intervalo = range(10) 2print(intervalo[2]) 3 4# Saída: 5# 2

Também é possível usar fatiamento (slicing):

1intervalo = range(10) 2print(intervalo[:4]) 3 4# Saída: 5# range(0, 4)

Note que o resultado do fatiamento ainda é um range, não uma lista.

Descobrindo o tamanho de um range

Podemos descobrir quantos elementos existem em um range usando a função len():

1intervalo = range(0, 10, 2) 2print(len(intervalo)) 3 4# Saída:

Aqui, não é necessário gerar a lista [0, 2, 4, 6, 8] para saber que o range(0, 10, 2) possui 5 números ao total. O Python calcula esse valor com base nas regras do intervalo, sem precisar gerar a sequência inteira.


Vimos como o range é ideal sempre que precisamos representar intervalos numéricos previsíveis. Em breve, vamos explorar como ele se conecta com estruturas que executam ações repetidas nos nossos códigos.

← AnteriorManipulando dicionáriosPróximo →Operadores de pertencimento
# Saída:
6# <class 'range'>
5
6# Saída:
7# range(0, 5)
8# [0, 1, 2, 3, 4]
)
)
5
6# Saída:
7# range(2, 6)
8# [2, 3, 4, 5]
)
)
5
6# Saída:
7# range(1, 10, 2)
8# [1, 3, 5, 7, 9]
intervalo
)
)
5
6# Saída:
7# range(5, 0, -1)
8# [5, 4, 3, 2, 1]
input
(
"De quanto em quanto ela deve pular?"
)
)
4
5intervalo = range(inicio, fim, passo)
6# [3, 4, 5, 6, 7]
5# 5