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.