Pesquisando propriedades de objetos em uma lista (Python)

Pesquisando propriedades de objetos em uma lista (Python)

Overview

Bem-vindos ao mundo da programação com Python, onde pequenos truques podem economizar tempo e linhas de código! Hoje, vamos aprender a usar a função any para verificar se algum dos nossos clientes usa Gmail. É uma dica rápida, mas que tem o poder de tornar o seu código mais limpo e eficiente. Prepare-se para adicionar mais uma ferramenta ao seu arsenal de desenvolvedor!

Você tem uma lista de objetos (clientes) e (por alguma razão) quer saber se algum deles possuem conta no gmail. Geralmente você faz um for, iterando pela lista e comparando individualmente a propriedade de email. Pois é, o Python tem uma função que faz isso para você, ou seja, a leitura fica melhor e você economiza linhas de código.

Caso precise revisar a sintaxe de loops em Python, você pode dar uma olhada neste post.

Para fins didáticos, vamos imaginar a seguinte classe:

1class Cliente:
2    nome = None
3    sobrenome = None
4    email = None
5    
6    def __init__(self, nome=None, sobrenome=None, email=None):
7        self.nome = nome
8        self.sobrenome = sobrenome
9        self.email = email

Ok. Temos uma "classe base" para este exemplo, vamos criar duas listas utilizando esta classe:

 1clientes_a = [
 2    Cliente(nome="Joao", sobrenome="De Barro", email="[email protected]"),
 3    Cliente(nome="Maria", sobrenome="De Barro", email="[email protected]"),
 4    Cliente(nome="Albervaldo", sobrenome="Capivara", email="[email protected]"),
 5    Cliente(nome="Xenia", sobrenome="Silva", email="[email protected]")
 6]
 7
 8clientes_b = [
 9    Cliente(nome="Mario", sobrenome="Ribeiro", email="[email protected]"),
10    Cliente(nome="Carolina", sobrenome="Silva", email="[email protected]"),
11    Cliente(nome="Shazam", sobrenome="Mata", email="[email protected]"),
12    Cliente(nome="Anderson", sobrenome="Santos", email="[email protected]")
13]

(Obs: Inventei todos os usuários. Em teoria, nenhum deles existe no mundo real, mas se tiver acertado algum, só avisar que eu mudo o post.)

Para fazer a verificação, vamos utilizar a função any, que recebe uma expressão como argumento e retorna True se existir alguma correspondência ou False se não existir. Veja a estrutura:

1any(<comparação> for objeto in lista)

Adaptando esta sintaxe para a nossa necessidade:

1any("gmail.com" in cliente.email for cliente in lista)

Obviamente, se isso fosse utilizado no mundo real, precisaríamos incluir algumas verificações extras, pois [email protected] é diferente de [email protected], mas vamos manter este exemplo simples. 🙂

Agora a utilização desta função para verificar se algum cliente possui conta no gmail:

 1#Verificando lista A
 2if any("gmail.com" in cliente.email for cliente in clientes_a):
 3    print("Alguém na lista A possui conta no gmail!")
 4else:
 5    print("Ninguém na lista A possui conta no gmail!")
 6
 7#Verificando lista B
 8if any("gmail.com" in cliente.email for cliente in clientes_b):
 9    print("Alguém na lista B possui conta no gmail!")
10else:
11    print("Ninguém na lista B possui conta no gmail!")

O fonte acima irá imprimir este resultado no console:

1>>> Ninguém na lista A possui conta no gmail!
2>>> Alguém na lista B possui conta no gmail!

Espero ter ajudado.

Referências: