Não use len()

Publicado em 2012-11-20 por Vinicius Assef

Como saber se uma lista está vazia ou preenchida em Python? Simples, basta testar a quantidade de itens presentes nela. Será que essa é a melhor forma de fazer isso?

É muito comum lermos código Python que testa se uma lista está preenchida ou vazia, assim:

if len(lista) > 0:
    print ("preenchida")

if len(lista) == 0:
    print ("vazia")

Certa vez eu já vi um teste meio esquisito para saber se uma lista estava vazia:

if lista == []:
    print ("vazia")

Em algumas linguagens, essa é a única forma de saber se uma lista está vazia ou preenchida, mas em Python existe uma maneira mais expressiva (chamamos pythônica) de conseguir o mesmo resultado:

if lista:
    print ("preenchida")

if not lista:
    print ("vazia")

O exemplo acima funciona porque Python avalia como True objetos preenchidos e como False os objetos vazios.

O mesmo princípio também vale para strings, dicionários, números, tuplas e tipos booleanos. Vamos usar uma string como exemplo:

>>> nome = "Huguinho"
>>> if nome:
...     print ("O nome é " + nome)
...
O nome é Huguinho
>>>
>>> nome = ""
>>> if not nome:
...     print ("Anônimo")
...
Anônimo
>>>

É claro que o len() existe para ser usado, mas somente quando quisermos realmente saber quantos itens existem:

>>> lista = ["Huguinho", "Zezinho", "Luisinho"]
>>> if lista:
...     print ("{n} sobrinhos".format(n=len(lista)))
... else:
...     print ("Nenhum sobrinho")
...
3 sobrinhos
>>>

Só use len() quando você precisar saber:

  1. Quantos caracteres existem numa string. Em Python 2, caracteres acentuados ocupam mais de um byte. No Python 3 isso não acontece, pois todas as strings são unicode.

  2. Quantos itens existem em qualquer objeto iterável (lista, tupla, set ou um objeto que você mesmo criar).

  3. Quantas chaves existem em um dicionário.

Só não use len() para saber se um objeto está vazio ou preenchido, ok?

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.