Sintaxe, exemplos e casos de uso

Ao trabalhar com iteráveis ​​do Python, localizar o número de itens que os iteráveis ​​contêm é uma operação comum. Aprenda a usar o len interno do Python para encontrar o comprimento de iteráveis ​​e muito mais.

O Python oferece um conjunto de estruturas de dados integradas e um conjunto de métodos para trabalhar com elas. Além disso, existem funções internas que são úteis ao trabalhar com essas estruturas de dados. Uma dessas funções é len(), que fornece o número de itens presentes em um iterável.

Neste tutorial, aprenderemos como usar a função len() com listas, tuplas, strings e muito mais. Também veremos alguns casos de uso comuns.

Vamos começar! 👩‍🏫

Sintaxe da Função Python len()

Aqui está a sintaxe para usar a função len do Python:

len(iterable)

Como visto, a função len() requer um parâmetro, que é qualquer iterável válido. O iterável geralmente é um de uma lista, tupla ou string. Mas também pode ser qualquer outro tipo válido.

Vemos que a sintaxe para usar a função len() é super simples. A seguir, vamos codificar alguns exemplos.

📑 Para os exemplos de código neste tutorial, você pode codificar em um Python REPL.

Usando a função len() com iteráveis

Com sequências

Você pode usar a função len() para encontrar o comprimento de iteráveis, como listas, tuplas e strings.

Aqui está um exemplo:

>>> nums = [9,3,6,1,2]
>>> len(nums)
5

>>> nums_tup = (9,3,6,1,2)
>>> len(nums_tup)
5

Para essas estruturas de dados que armazenam uma sequência, você normalmente acessará os elementos usando seu índice ou obterá uma fatia (subsequência) conforme necessário.

Com outras coleções

Você também pode usar a função len() com outras coleções do Python, como conjuntos e dicionários.

Essas estruturas de dados são coleções não ordenadas. Embora você possa não estar interessado em ordenar os itens, ainda é útil obter o número total de itens na coleção.

>>> nums_set = set(nums)
>>> len(nums_set)
5

>>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8}
>>> len(prices)
5

Casos de uso comuns da função Python len()

Até agora, vimos exemplos simples de uso da função len() para obter o número de itens em um iterável. Agora vamos ver onde podemos usar isso na prática.

#1. Iteração usando For Loops

O loop for do Python fornece uma construção para percorrer os iteráveis ​​no for de um item na sintaxe iterável. Mas se você quiser acessar o índice de cada item em vez do próprio item ou o índice e os itens juntos, você pode usar a função range() conforme mostrado:

>>> nums = [9,2,4,7,8]
>>> for i in range(len(nums)):
...      print(f"Index {i}: {nums[i]}")

Como range(N) fornece a sequência de inteiros 0,1,2,…,N – 1, usar range(len(nums)) nos fornece o conjunto de índices válidos para percorrer.

# Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

No entanto, a maneira Pythonic recomendada de acessar o índice e o elemento é usando a função enumerate:

>>> nums = [9,2,4,7,8]
>>> for idx,num in enumerate(nums):
...     print(f"Index {idx}: {num}")
# Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

#2. Loop condicional usando loops while

Digamos que você tenha uma lista de números nums. O método list pop() remove o último item da lista e o retorna.

Contanto que o comprimento da lista de nums len(nums) seja maior que zero, há pelo menos um elemento que pode ser removido.

>>> nums = [9,2,4,7,8]
>>> while len(nums) > 0:
...     nums.pop()
# Output
8
7
4
2
9

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

>>> nums = [9,2,4,7,8]
>>> while nums:
...     nums.pop()

while nums: é equivalente à condição “enquanto a lista nums não estiver vazia”.

#3. Verificando e validando o comprimento de iteráveis

Outro uso comum da função len é verificar e validar o comprimento de certos iteráveis.

Aqui, verificamos se o nome de usuário é uma string válida com base no comprimento (calculado usando a função len()):

>>> username = "another-random-user"
>>> if len(username) > 10:
...     print("Username too long; should be 10 characters long at max.")
... elif len(username) < 5:
...     print("Username too short; should be at least 5 characters long.")
... else:
...     print("Valid username!")
Username too long; should be 10 characters long at max.

#4. Compreensão de Lista e Dicionário

As compreensões em Python fornecem uma sintaxe concisa para construir novos iteráveis ​​a partir dos existentes. Podemos usar funções internas em uma expressão de compreensão.

Compreensão de lista

Nesta compreensão de lista, usamos a função len() para obter o comprimento de cada string na lista de idiomas.

>>> languages = ['Python','C','Rust','JavaScript']
>>> len_langs = [len(lang) for lang in languages]
>>> len_langs
[6, 1, 4, 10]

Compreensão de Dicionário

Nesta compreensão de dicionário, usamos a lista de idiomas e a função len() para construir um dicionário:

>>> languages = ['Python','C','Rust','JavaScript']
>>> lang_len = {lang:len(lang) for lang in languages}
>>> lang_len
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}

Aqui, as chaves e os valores são as strings de idioma e o comprimento das strings de idioma, respectivamente.

#5. Parâmetro-chave na classificação personalizada

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

Em ambos, você pode usar o parâmetro chave para personalizar a classificação.

Aqui, classificamos a lista de idiomas com base no comprimento da string.

>>> languages = ['Python','C','Rust','JavaScript']
>>> languages.sort(key=len)
>>> languages
['C', 'Rust', 'Python', 'JavaScript']

No trecho abaixo, usamos a função sorted() para obter uma lista ordenada.

>>> languages = ['Hindi','English','German','French']
>>> sorted(languages,key=len)
['Hindi', 'German', 'French', 'English']

Neste exemplo, ‘alemão’ e ‘francês’ têm 6 caracteres cada. Como a função sorted() executa classificação estável, a ordem na lista original é preservada.

#6. Comprimento das matrizes NumPy

Você também pode usar a função len() com outras estruturas de dados como Matrizes NumPy.

>>> import numpy as np
>>> np_array = np.array([3,4,6,9])
>>> type(np_array)
<class 'numpy.ndarray'>
>>> len(np_array)
4

Neste caso, np_array é um vetor com 4 elementos. Então len(np_array) retorna 4, o número de elementos presentes na matriz.

Uma matriz é uma matriz bidimensional.

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

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

Para entender, vamos voltar à matriz. Temos uma estrutura de lista aninhada onde a lista externa contém duas listas aninhadas. E a função len() retorna o número de itens em um container (aqui são duas listas):

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

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

No entanto, ao começar a trabalhar com matrizes multidimensionais, é recomendável usar o atributo de forma.

>>> np_array.shape
(2, 3)

Armadilhas comuns a serem evitadas ao usar a função len() do Python

Para encerrar nossa discussão, vamos examinar algumas das armadilhas comuns que você deve evitar ao usar a função len em Python.

Usando len() com tipos de dados não iteráveis

Sabemos que a função len aceita apenas iteráveis ​​válidos como argumento. Ou seja, se você chamar a função len com — um tipo de dados inválido — que não é iterável, você encontrará erros.

Esses tipos inválidos incluem os tipos de dados básicos, como inteiros, números de ponto flutuante e booleanos:

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

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

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

Em Python, os geradores são opções com eficiência de memória para casos de uso que requerem geração de sequência. O objeto gerador retorna os elementos da sequência — sob demanda — um elemento por vez. Mas os objetos geradores não têm comprimento.

Portanto, você encontrará erros se tentar calcular o comprimento de um objeto gerador:

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

Usando len() com Tuplas de Comprimento Um

Se você inserir apenas o elemento em uma tupla, o Python o interpretará como um único elemento e não como uma tupla.

Aqui está um exemplo:

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

Portanto, quando você tiver uma tupla com apenas um elemento, inicialize-a desta forma: tuple_name = (elt, ) para que seja interpretada como uma tupla:

>>> nums = (1,)
>>> len(nums)
1

Resumindo

Aqui está um resumo do que abordamos neste tutorial:

  • Você pode encontrar o número de itens em qualquer iterável usando a função len() em Python. A sintaxe para usar a função length é: len(any-valid-iterable).
  • Isso inclui sequências como listas, tuplas e strings. E outras coleções, como dicionários e conjuntos.
  • A função len() é comumente usada em loops e compreensões.
  • Você também pode usar a função len() como parâmetro-chave quando precisar personalizar a classificação de acordo com o comprimento. Por exemplo: classificar uma lista de strings com base em seu comprimento.

A seguir, aprenda como usar a função sum() do Python.