Domine a Função len() em Python: Guia Completo com Exemplos

Ao manipular coleções de dados em Python, é comum querer saber quantos itens elas contêm. Neste guia, você aprenderá como usar a função `len()`, uma ferramenta essencial para descobrir o tamanho de diferentes tipos de coleções, também chamadas de iteráveis.

O Python oferece uma variedade de estruturas de dados prontas para uso, acompanhadas de métodos para gerenciá-las. Além disso, existem funções internas, como a função `len()`, que se mostram extremamente úteis ao lidar com essas estruturas. A função `len()` é projetada para fornecer o número exato de elementos presentes em um iterável.

Neste artigo, vamos explorar a aplicação da função `len()` em listas, tuplas, strings e outros tipos de dados. Além disso, examinaremos casos de uso práticos e comuns para essa função.

Vamos começar! 👩‍🏫

Sintaxe da Função `len()` em Python

A forma de usar a função `len()` é bastante direta:

len(iterável)

Como se pode observar, a função `len()` aceita um único argumento, que deve ser um iterável válido. Isso significa que ela funciona com listas, tuplas, strings e outros tipos de dados capazes de serem percorridos.

A simplicidade da sintaxe da função `len()` é uma de suas vantagens. Para entender melhor, vamos examinar alguns exemplos práticos.

📑 Para os exemplos de código, você pode usar um ambiente REPL Python.

Usando `len()` com Iteráveis

Com Sequências

A função `len()` é útil para determinar o tamanho de sequências, como listas, tuplas e strings.

Confira este exemplo:

>>> numeros = [5, 10, 15, 20, 25]
>>> len(numeros)
5

>>> numeros_tupla = (5, 10, 15, 20, 25)
>>> len(numeros_tupla)
5

Em estruturas de dados que armazenam sequências, você geralmente acessará os elementos usando seus índices ou extrairá partes (subsequências) conforme necessário.

Com Outras Coleções

A função `len()` também funciona com outras coleções do Python, como conjuntos (sets) e dicionários.

Estas estruturas são coleções não ordenadas. Embora a ordenação não seja o objetivo, obter a quantidade total de itens é útil.

>>> numeros_set = set(numeros)
>>> len(numeros_set)
5

>>> precos = {'Caderno': 10, 'Lápis': 2, 'Borracha': 1, 'Caneta': 3, 'Régua': 4}
>>> len(precos)
5

Aplicações Comuns da Função `len()` em Python

Até agora, vimos exemplos diretos do uso da função `len()` para obter o número de itens em um iterável. Agora, vamos ver como isso se aplica em cenários do dia a dia.

#1. Iteração com Loops `for`

O loop `for` em Python permite percorrer os elementos de um iterável usando a sintaxe `for item in iterável`. No entanto, se você precisar do índice de cada item (em vez do item em si, ou junto com ele), pode usar a função `range()` em combinação com `len()`:

>>> numeros = [100, 200, 300, 400, 500]
>>> for i in range(len(numeros)):
...     print(f"Índice {i}: {numeros[i]}")

Como `range(N)` gera uma sequência de inteiros de 0 a N-1, `range(len(numeros))` nos fornece os índices válidos para iterar.

# Saída
Índice 0: 100
Índice 1: 200
Índice 2: 300
Índice 3: 400
Índice 4: 500

A abordagem mais comum em Python, no entanto, para acessar índice e elemento, é usar `enumerate`:

>>> numeros = [100, 200, 300, 400, 500]
>>> for indice, numero in enumerate(numeros):
...     print(f"Índice {indice}: {numero}")
# Saída
Índice 0: 100
Índice 1: 200
Índice 2: 300
Índice 3: 400
Índice 4: 500

#2. Loop Condicional com Loops `while`

Imagine que você tem uma lista de números chamada `numeros`. O método `pop()` de listas remove e retorna o último elemento.

Se o tamanho da lista (`len(numeros)`) for maior que zero, haverá pelo menos um item para remover.

>>> numeros = [1, 2, 3, 4, 5]
>>> while len(numeros) > 0:
...     numeros.pop()
# Saída
5
4
3
2
1

O exemplo acima é uma forma mais explícita de escrever o seguinte:

>>> numeros = [1, 2, 3, 4, 5]
>>> while numeros:
...     numeros.pop()

`while numeros:` é equivalente a “enquanto a lista `numeros` não estiver vazia”.

#3. Validação do Tamanho de Iteráveis

Outra aplicação comum da função `len()` é a validação do tamanho de iteráveis.

Aqui, verificamos se um nome de usuário é válido, com base em seu tamanho (determinado por `len()`):

>>> nome_usuario = "usuario_aleatorio_123"
>>> if len(nome_usuario) > 15:
...     print("Nome de usuário muito longo. Máximo de 15 caracteres.")
... elif len(nome_usuario) < 5:
...     print("Nome de usuário muito curto. Mínimo de 5 caracteres.")
... else:
...     print("Nome de usuário válido!")
Nome de usuário muito longo. Máximo de 15 caracteres.

#4. List Comprehensions e Dict Comprehensions

As comprehensions oferecem uma sintaxe concisa para construir novos iteráveis a partir de existentes. Podemos usar funções internas em expressões de comprehension.

List Comprehension

Nesta list comprehension, usamos `len()` para obter o tamanho de cada string na lista de linguagens.

>>> linguagens = ['Python', 'Java', 'C++', 'JavaScript']
>>> tamanho_linguagens = [len(lang) for lang in linguagens]
>>> tamanho_linguagens
[6, 4, 3, 10]

Dict Comprehension

Nesta dict comprehension, usamos a lista de linguagens e `len()` para construir um dicionário:

>>> linguagens = ['Python', 'Java', 'C++', 'JavaScript']
>>> tamanho_linguagens = {lang: len(lang) for lang in linguagens}
>>> tamanho_linguagens
{'Python': 6, 'Java': 4, 'C++': 3, 'JavaScript': 10}

Aqui, as chaves são as strings das linguagens, e os valores são os tamanhos dessas strings.

#5. Parâmetro `key` na Ordenação Personalizada

O Python tem o método interno `sort()` para ordenar listas no local, e a função `sorted()` para ordenar listas e outros iteráveis.

Em ambos, o parâmetro `key` permite personalizar a ordenação.

Aqui, ordenamos uma lista de linguagens com base no tamanho de suas strings.

>>> linguagens = ['Python', 'Java', 'C++', 'JavaScript']
>>> linguagens.sort(key=len)
>>> linguagens
['C++', 'Java', 'Python', 'JavaScript']

No trecho abaixo, usamos `sorted()` para obter uma lista ordenada.

>>> linguagens = ['Portugues', 'Ingles', 'Espanhol', 'Frances']
>>> sorted(linguagens, key=len)
['Ingles', 'Frances', 'Portugues', 'Espanhol']

Neste exemplo, ‘Ingles’ e ‘Frances’ têm 6 caracteres cada. `sorted()` realiza uma ordenação estável, preservando a ordem original.

#6. Tamanho de Arrays NumPy

Também podemos usar `len()` com outras estruturas de dados, como Arrays NumPy.

>>> import numpy as np
>>> array_np = np.array([10, 20, 30, 40])
>>> type(array_np)
<class 'numpy.ndarray'>
>>> len(array_np)
4

Neste caso, `array_np` é um vetor com 4 elementos. `len(array_np)` retorna 4, o número de elementos.

Uma matriz é um array bidimensional.

Considere o seguinte exemplo. `len(array_np)` é 2, que é o número de linhas.

>>> matriz = [[1, 2, 3], [4, 5, 6]]
>>> array_np = np.array(matriz)
>>> array_np
array([[1, 2, 3],
       [4, 5, 6]])
>>> len(array_np)
2

Em essência, temos uma estrutura de lista aninhada, onde a lista externa contém duas listas internas. `len()` retorna o número de itens dentro do contêiner (neste caso, duas listas):

>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

Ao lidar com arrays multidimensionais, recomenda-se o uso do atributo `.shape`.

>>> array_np.shape
(2, 3)

Armadilhas Comuns ao Usar `len()` em Python

Para finalizar, vamos ver alguns erros que você deve evitar ao usar `len()` em Python.

Usando `len()` com Tipos de Dados Não Iteráveis

A função `len()` aceita apenas iteráveis válidos como argumento. Portanto, se você tentar usá-la com um tipo de dado não iterável, ocorrerá um erro.

Tipos não iteráveis incluem os tipos básicos, como inteiros, floats e booleanos:

>>> len(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

>>> len(False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'bool' has no len()

>>> len(2.71)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'float' has no len()

Em Python, geradores são opções eficientes em termos de memória para a criação de sequências. Um objeto gerador retorna elementos sob demanda, um por vez. No entanto, geradores não têm tamanho conhecido.

Se você tentar obter o tamanho de um gerador usando `len()`, ocorrerá um erro:

>>> quadrados = (i*i for i in range(5))
>>> quadrados
<generator object <genexpr> at 0x026118E8>
>>> len(quadrados)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'generator' has no len()

Usando `len()` com Tuplas de um Elemento

Se você inserir um único elemento dentro de parênteses, o Python o interpretará como um elemento individual, não como uma tupla.

Exemplo:

>>> numeros = (10)
>>> len(numeros)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

Se você tiver uma tupla com um só elemento, inicialize-a assim: `nome_tupla = (elemento,)` para que o Python a interprete como tupla:

>>> numeros = (10,)
>>> len(numeros)
1

Resumo

Aqui está um resumo dos principais pontos abordados neste tutorial:

  • A função `len()` em Python permite determinar o número de itens em qualquer iterável. Sua sintaxe é: `len(iteravel_valido)`.
  • Ela funciona com sequências como listas, tuplas e strings, e coleções como dicionários e conjuntos.
  • A função `len()` é comumente usada em loops e comprehensions.
  • Ela também pode ser usada como parâmetro `key` para personalização da ordenação, por exemplo, para ordenar uma lista de strings pelo tamanho.

A seguir, aprenda sobre a função `sum()` em Python.