Curso
A função len()
é uma das primeiras ferramentas em que os programadores Python confiam para inspecionar dados. Você certamente já encontrou o site len()
se estiver trabalhando em nosso curso Introdução ao Python para desenvolvedores ou em nosso curso de habilidades Fundamentos da programação em Python.
Neste artigo, mostrarei a você como o len()
funciona no Python em todos os tipos de dados comuns e mostrarei o que você deve observar quando as coisas derem errado.
O que a função len() do Python faz?
Você pode usar a função incorporada do Python len()
sempre que precisar verificar quantos itens algo contém. Estou pensando em contar o número de elementos em uma lista ou contar o número de caracteres em uma string. Você também pode usá-lo para contar as chaves em um dicionário. Há todos os tipos de uso.
Veja como você o utiliza em sua forma mais básica:
len(object)
Basta colocar o que você quiser medir (como as coisas que listei acima) no lugar de object
.
Usando len() com tipos de dados comuns do Python
Listei alguns casos de uso comuns acima, mas todos eles eram um pouco abstratos. Vamos analisar exemplos comuns para tornar mais óbvio o valor do uso do len()
.
Contagem de caracteres em uma string
Suponha que você queira saber o tamanho exato de um trecho de texto, incluindo todos os espaços e sinais de pontuação:
word = "Josef"
print(len(word))
Isso imprime 5
, pois a palavra "Josef"
(com um "f") consiste em cinco caracteres.
Verificar o número de itens em uma lista
Se você quiser descobrir quantos itens uma lista contém, use isso:
numbers = [10, 20, 30, 40, 50]
print(len(numbers))
Aqui, você verá 5
como saída.
Obtendo o tamanho de uma tupla
As tuplas, assim como as listas, agrupam itens, mas são imutáveis, o que significa que não podem ser alteradas depois de criadas. len()
também funciona aqui:
dimensions = (1920, 1080)
print(len(dimensions))
Isso produz 2
, já que a tupla armazena dois elementos.
Contagem de chaves em um dicionário
Nos dicionários Python, você só precisa de pares de valores-chave. Quando você usa len()
em um dicionário, ele conta apenas as chaves:
person = {"name": "Alice", "age": 30, "city": "Paris"}
print(len(person))
Assim, você obtém 3
(um para cada chave).
Verificação de elementos únicos em um conjunto
Os conjuntos são úteis quando você deseja armazenar apenas itens exclusivos. len()
dirá a você:
colors = {"red", "green", "blue", "red"}
print(len(colors))
Isso retorna 3
, já que "red"
aparece duas vezes, mas é contado uma vez.
Como len() funciona nos bastidores
Você deve estar se perguntando, como eu, como o len()
realmente determina o tamanho.
Por baixo, quando você chama len()
em um objeto, o Python procura o método __len__
desse objeto. Os tipos incorporados, como listas, cadeias de caracteres e dicionários, têm esse método.
Saber disso nos diz que, se criarmos sua própria classe e quisermos que o len()
trabalhe com ela, teremos que definir um método __len__
para nós mesmos:
class Box:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
my_box = Box(["apple", "banana", "orange"])
print(len(my_box))
Aqui, len()
retorna 3
, porque a caixa contém três itens. Assim como fizemos com listas e cadeias de caracteres, o len()
se adapta, desde que o objeto forneça um método __len__
.
O que acontece quando len() não funciona?
É claro que nem tudo em Python tem um comprimento. Se você tentar usar len()
em algo que não o suporta (mostrarei em um segundo com um tipo de dados int
), o Python o avisará com um TypeError
. Esse é um problema comum, especialmente se você estiver trabalhando com tipos de dados mistos. Por exemplo:
num = 42
print(len(num))
Isso gera o seguinte erro:
TypeError: object of type 'int' has no len()
Sempre que vir isso, verifique se o objeto que você está medindo é realmente um contêiner ou uma sequência (cadeia de caracteres, lista ou dicionário) e se não é um valor único, como um inteiro ou um float.
Alguns casos de uso úteis de len()
Não vamos tentar elevar os exemplos para que se assemelhem mais a situações de programação do mundo real.
Looping com um intervalo
Quando você precisa percorrer uma lista usando seus índices, o site len()
ajuda a definir o intervalo correto para o loop:
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"Index {i}: {fruits[i]}")
Isso imprime cada fruta junto com seu índice, dando a você ordem e contexto.
Index 0: apple
Index 1: banana
Index 2: cherry
Verificação de recipientes vazios
Frequentemente, você desejará saber se um contêiner - como uma lista ou um dicionário - está vazio antes de prosseguir:
cart = []
if len(cart) == 0:
print("Your shopping cart is empty.")
Esse padrão ajuda você a evitar erros ou processamento desnecessário quando não há nada com que trabalhar.
Truncando cadeias longas
Se você estiver lidando com a entrada do usuário ou exibindo rótulos, talvez queira limitar o comprimento da cadeia de caracteres. len()
ajuda você a impor esses limites:
username = "superlongusername"
if len(username) > 10:
username = username[:10]
print(username)
Aqui, qualquer nome de usuário com mais de 10 caracteres é cortado.
Erros comuns com len()
len()
pode atrapalhá-lo, mesmo que você tenha alguma experiência com Python:
-
Você está tentando usar len() em números inteiros ou flutuantes: Os números não são coleções, portanto, não têm um comprimento.
-
Você se esquece de que len() conta itens, não valores: Em um dicionário, o len conta as chaves, mesmo que várias chaves apontem para o mesmo valor.
-
Supondo que len() funcione em tudo: As classes personalizadas precisam de um método
__len__
; caso contrário, olen()
não saberá o que fazer.
Tente se lembrar dessas regras para economizar tempo na depuração.
Tratamento de erros com len()
Como o site len()
pode gerar um TypeError
se for mal utilizado, é aconselhável que você prepare seu código para essa possibilidade, especialmente ao trabalhar com dados imprevisíveis. Um bloco try-except é uma maneira simples de lidar com esses erros de forma elegante:
data = 123
try:
print(len(data))
except TypeError:
print("Object has no length.")
Em vez de travar, seu programa agora imprime uma mensagem amigável. Nosso curso Programação orientada a objetos em Python é um ótimo recurso para você se tornar bom nesse tipo de coisa.
Usando len() com classes personalizadas
Vamos voltar às classes personalizadas. Uma classe personalizada é qualquer classe que você mesmo define usando a palavra-chave class
- como quando você está modelando algo específico do seu programa, como Team
, Box
, ou Library
. Anteriormente, você viu que o len()
funciona em tipos incorporados, como listas e dicionários, porque eles implementam um método especial chamado __len__()
. O mesmo se aplica às suas próprias classes. Se quiser que o len()
funcione neles, você mesmo precisa definir o __len__()
.
Não estou tentando sobrecarregar você com detalhes técnicos. Acho que vale a pena mencionar isso porque é importante quando você está criando contêineres de dados personalizados que devem se comportar como coleções nativas do Python. Ao oferecer suporte a len()
, seus objetos podem interagir mais naturalmente com o restante do ecossistema Python, incluindo outras funções e bibliotecas.
Aqui está uma rápida recapitulação:
class Team:
def __init__(self, players):
self.players = players
def __len__(self):
return len(self.players)
my_team = Team(["Alice", "Bob", "Cathy"])
print(len(my_team))
Novamente, len()
retorna 3
, que é a resposta correta, pois esse é o número de jogadores do seu time.
Conclusão
Na próxima vez que você precisar contar, medir ou verificar o tamanho de algo em Python, lembre-se de que len()
é uma ótima opção.
Mas agora que chegamos ao final, quero mencionar outro aspecto importante. Nós nos concentramos em uma função, mas quase sempre há muitas maneiras diferentes de realizar algo em Python. Temos um artigo que mostra várias maneiras diferentes de encontrar o comprimento de uma lista, das quais a função len()
é apenas uma opção: Tamanho da lista Python: 8 Métodos diferentes para encontrar o comprimento de uma lista em Python.
Continue praticando novos métodos. É uma maneira infalível de transformar você em um programador mais forte. E lembre-se de se inscrever em nosso programa de habilidades emprogramação Python, que ensinará a você como otimizar o código, escrever funções e testes e muito mais.
