len() e Índice no Python: Qual É a Diferença?
Se o Python começa os índices em 0, por que len() começa contando em 1? A resposta está na diferença entre quantidade e posição.
02/10/2026 Desenvolvimento
Se o Python começa os índices em 0, por que o len() começa contando em 1?
Quando a gente começa a estudar Python, essa dúvida aparece rápido. A resposta está na diferença entre duas ideias que parecem iguais, mas servem para coisas diferentes: quantidade e posição.
1. len(): conta quantos existem
A função len() retorna o número total de elementos de uma sequência: caracteres de uma string, itens de uma lista ou tupla, chaves de um dicionário, entre outros.
nome = "Ana Clara"
print(len(nome))
Resultado:
9
São 9 caracteres: A, n, a, o espaço, C, l, a, r, a. O espaço também conta! Como len() responde "quantos existem?", ela conta do jeito que a gente conta no dia a dia: 1, 2, 3...
2. Índice: indica onde está
O índice é a posição de cada elemento dentro da sequência. Em Python, a contagem de posições começa em 0.
nome = "Ana Clara"
print(nome[0])
Resultado:
A
Veja como ficam os índices da mesma string:
Caractere: A n a C l a r a
Índice: 0 1 2 3 4 5 6 7 8
Repare que o primeiro caractere está no índice 0 e o último está no índice 8, mesmo a string tendo 9 caracteres.
Por que parece que os dois não combinam?
Porque eles respondem perguntas diferentes:
len()responde: quantos elementos existem?- índice responde: onde está cada elemento?
A relação entre os dois é simples: o último índice sempre vale len() - 1.
nome = "Ana Clara"
print(nome[len(nome) - 1])
Resultado:
a
E se você tentar acessar nome[len(nome)], ou seja, nome[9], o Python vai gerar um IndexError, porque não existe posição 9 em uma sequência de 9 elementos (as posições vão de 0 a 8).
Importante: o len() não funciona com qualquer coisa
A função len() só funciona com objetos que têm tamanho, como strings, listas, tuplas e dicionários. Um número inteiro, por exemplo, não tem tamanho:
print(len(10))
Isso gera um erro:
TypeError: object of type 'int' has no len()
Mas se o 10 for uma string, funciona normalmente:
print(len("10"))
2
O resultado é 2 porque a string "10" tem dois caracteres: o "1" e o "0".
Exemplo com lista
A mesma lógica vale para listas:
frutas = ["maçã", "banana", "uva"]
print(len(frutas)) # 3
print(frutas[0]) # maçã
print(frutas[2]) # uva
print(frutas[-1]) # uva (o último, usando índice negativo)
A lista tem 3 itens, mas os índices vão de 0 a 2. O índice negativo -1 é um atalho para o último elemento, sem precisar calcular len() - 1.
Por que isso importa?
Essa diferença é essencial para trabalhar com listas, strings, dicionários, loops e muito mais em Python. É comum usar os dois juntos, por exemplo para percorrer todas as posições de uma lista:
for i in range(len(frutas)):
print(i, frutas[i])
Aqui, len(frutas) diz quantos itens existem (3) e range() gera os índices de 0 a 2.
Para lembrar
len()→ quantos elementos existem (a contagem começa em 1).- índice → onde o elemento está (a contagem começa em 0).
- O último índice é sempre
len() - 1. - Acessar um índice igual ou maior que
len()geraIndexError. len()só funciona com objetos que têm tamanho:len("10")retorna 2, maslen(10)gera erro.
Entender o básico te dá mais confiança no código. Teste os exemplos no seu computador, troque os valores e confira se o resultado é o que você esperava. Bora praticar?
Teste seu conhecimento
Responda às perguntas abaixo para revisar os principais pontos deste artigo.
1. O que a função len() retorna?
Resposta correta: B) O número total de elementos de uma sequência.
len() responde "quantos elementos existem?" e conta a partir de 1.
2. Em Python, qual é o índice do primeiro elemento de uma string?
Resposta correta: C) 0.
A contagem de posições em Python começa em 0.
3. Qual é o resultado de len("Ana Clara")?
Resposta correta: A) 9.
A string tem 9 caracteres, contando o espaço.
4. Qual é o último índice válido de uma lista com 5 elementos?
Resposta correta: D) 4.
O último índice é sempre len() - 1, ou seja, 5 - 1 = 4.
5. O que acontece ao executar len(10) e len("10")?
Resposta correta: B) len(10) gera erro e len("10") retorna 2.
Um inteiro não tem tamanho (TypeError), mas a string "10" tem 2 caracteres.