Pular para o conteúdo

Como utilizar o 'in' no Python?

CodeMDD.io

Operadores “in” e “not in” do Python: Verificando a Existência de Elementos

Os operadores in e not in do Python permitem que você verifique rapidamente se um determinado valor está ou não faz parte de uma coleção de valores. Esse tipo de verificação é comum na programação e é geralmente conhecido como teste de associação em Python. Portanto, esses operadores são chamados de operadores de associação.

Neste tutorial, você aprenderá como:

  • Realizar testes de associação usando os operadores in e not in
  • Utilizar in e not in com diferentes tipos de dados
  • Trabalhar com operator.contains(), a função equivalente ao operador in
  • Fornecer suporte para in e not in em suas próprias classes

Começando com Testes de Associação em Python

Às vezes, você precisa descobrir se um valor está presente em uma coleção de valores ou não. Em outras palavras, você precisa verificar se um determinado valor é ou não um membro de uma coleção de valores. Esse tipo de verificação é comumente conhecido como um teste de associação.

Considere a seguinte função is_member():

def is_member(value, iterable):
for item in iterable:
if value is item or value == item:
return True
return False

Para entender como essa função funciona, vamos dar uma olhada em alguns exemplos de uso.

Operador “in” do Python

O operador in é usado para verificar se um valor está presente em uma coleção de valores. Ele retorna True se o valor estiver presente e False caso contrário.

Exemplo:

numbers = [1, 2, 3, 4, 5]
if 3 in numbers:
print("3 está presente na lista.")
else:
print("3 não está presente na lista.")

Saída:

3 está presente na lista.

Neste exemplo, verificamos se o número 3 está presente na lista de números [1, 2, 3, 4, 5]. Como o número 3 está na lista, a condição 3 in numbers retorna True e o primeiro bloco de código é executado, exibindo “3 está presente na lista” como resultado.

Operador “not in” do Python

O operador not in é usado para verificar se um valor não está presente em uma coleção de valores. Ele retorna True se o valor não estiver presente e False caso contrário.

Exemplo:

numbers = [1, 2, 3, 4, 5]
if 6 not in numbers:
print("6 não está presente na lista.")
else:
print("6 está presente na lista.")

Saída:

6 não está presente na lista.

Neste exemplo, verificamos se o número 6 não está presente na lista de números [1, 2, 3, 4, 5]. Como o número 6 não está na lista, a condição 6 not in numbers retorna True e o primeiro bloco de código é executado, exibindo “6 não está presente na lista” como resultado.

Usando in e not in com Diferentes Tipos de Dados

Os operadores in e not in podem ser usados com diferentes tipos de dados em Python. Vamos ver como esses operadores funcionam com listas, tuplas, strings, geradores, dicionários e conjuntos.

Listas, Tuplas e Ranges

Os operadores in e not in podem ser usados para verificar se um valor está presente em uma lista, tupla ou range.

Exemplo:

fruits = ["apple", "banana", "cherry"]
my_tuple = ("apple", "banana", "cherry")
my_range = range(5)
if "banana" in fruits:
print("banana está presente na lista de frutas.")
if "banana" not in my_tuple:
print("banana não está presente na tupla.")
if 3 in my_range:
print("3 está presente no range.")

Saída:

banana está presente na lista de frutas.
banana não está presente na tupla.
3 está presente no range.

Neste exemplo, verificamos a presença da fruta “banana” na lista de frutas usando o operador in. Como a fruta “banana” está na lista, a condição "banana" in fruits retorna True e a primeira mensagem é impressa. Em seguida, verificamos se a fruta “banana” não está presente na tupla usando o operador not in. Como a fruta não está na tupla, a condição "banana" not in my_tuple retorna True e a segunda mensagem é impressa. Por fim, verificamos se o número 3 está presente no range usando o operador in. Como o número 3 está no range, a condição 3 in my_range retorna True e a terceira mensagem é impressa.

Strings

Os operadores in e not in também podem ser usados para verificar se um caractere ou uma sequência de caracteres está presente em uma string.

Exemplo:

sentence = "Python is a powerful programming language."
if "Python" in sentence:
print("A palavra 'Python' está presente na frase.")
if "ruby" not in sentence:
print("A palavra 'ruby' não está presente na frase.")

Saída:

A palavra 'Python' está presente na frase.
A palavra 'ruby' não está presente na frase.

Neste exemplo, verificamos a presença da palavra “Python” na frase usando o operador in. Como a palavra “Python” está na frase, a condição "Python" in sentence retorna True e a primeira mensagem é impressa. Em seguida, verificamos se a palavra “ruby” não está presente na frase usando o operador not in. Como a palavra não está na frase, a condição "ruby" not in sentence retorna True e a segunda mensagem é impressa.

Generators

Os operadores in e not in também podem ser usados para verificar se um valor está presente em um gerador.

Exemplo:

squares = (x**2 for x in range(5))
if 4 in squares:
print("4 está presente no gerador de quadrados.")

Saída:

4 está presente no gerador de quadrados.

Neste exemplo, criamos um gerador de quadrados usando uma compreensão de gerador. Verificamos se o número 4 está presente no gerador usando o operador in. Como o número 4 é um dos valores gerados, a condição 4 in squares retorna True e a mensagem é impressa.

Dicionários e Conjuntos

Os operadores in e not in também podem ser usados para verificar se uma chave está presente em um dicionário ou se um elemento está presente em um conjunto.

Exemplo:

person = {"name": "John", "age": 30, "city": "New York"}
my_set = {1, 2, 3, 4, 5}
if "age" in person:
print("A chave 'age' está presente no dicionário.")
if 6 not in my_set:
print("O elemento 6 não está presente no conjunto.")

Saída:

A chave 'age' está presente no dicionário.
O elemento 6 não está presente no conjunto.

Neste exemplo, verificamos se a chave “age” está presente no dicionário usando o operador in. Como a chave está presente, a condição "age" in person retorna True e a primeira mensagem é impressa. Em seguida, verificamos se o elemento 6 não está presente no conjunto usando o operador not in. Como o elemento não está no conjunto, a condição 6 not in my_set retorna True e a segunda mensagem é impressa.

Colocando os Operadores in e not in do Python em Ação

Os operadores in e not in são frequentemente usados para simplificar expressões lógicas. Vejamos alguns exemplos de como esses operadores podem ser usados em ações práticas.

Substituindo Operadores Encadeados ou

Às vezes, você precisa verificar se uma variável está contida em várias coleções de valores. Uma abordagem comum seria usar operadores lógicos ou (|) para combinar várias condições.

Exemplo:

number = 10
if number == 5 or number == 10 or number == 15:
print("O número está contido na lista.")

Saída:

O número está contido na lista.

Neste exemplo, verificamos se o número 10 está presente em uma lista de valores usando um operador lógico ou (|). No entanto, essa abordagem pode se tornar custosa e difícil de manter se tivermos muitas condições. Uma alternativa mais concisa é usar o operador in em conjunto com uma lista, como mostrado a seguir:

number = 10
if number in [5, 10, 15]:
print("O número está contido na lista.")

Saída:

O número está contido na lista.

Neste exemplo, verificamos se o número 10 está na lista [5, 10, 15] usando o operador in. Como o número está na lista, a condição number in [5, 10, 15] retorna True e a mensagem é impressa. Usar o operador in torna o código mais legível e mais fácil de manter.

Escrevendo Testes de Associação Eficientes

Quando você está lidando com grandes coleções de valores, pode ser necessário realizar muitos testes de associação. Nesse caso, usar a função is_member() descrita anteriormente pode não ser eficiente, pois ela percorre todos os valores.

Em vez disso, você pode usar os operadores in e not in diretamente nas coleções de valores. Esses operadores são implementados de forma eficiente nas estruturas de dados do Python, o que torna os testes de associação rápidos e eficientes.

Exemplo:

large_list = list(range(1000000))
if 999999 in large_list:
print("O número 999999 está presente na lista.")

Saída:

O número 999999 está presente na lista.

Neste exemplo, verificamos se o número 999999 está presente em uma lista grande com um milhão de valores. Usamos o operador in diretamente na lista, o que permite uma verificação eficiente. Como o número está na lista, a condição 999999 in large_list retorna True e a mensagem é impressa.

Usando operator.contains() para Testes de Associação

Além dos operadores in e not in, o módulo operator fornece a função contains(), que é equivalente ao operador in. Essa função pode ser útil quando você precisa passar um teste de associação como um argumento de função.

Exemplo:

import operator
numbers = [1, 2, 3, 4, 5]
if operator.contains(numbers, 3):
print("3 está presente na lista de números.")

Saída:

3 está presente na lista de números.

Neste exemplo, usamos a função contains() do módulo operator para verificar se o número 3 está presente na lista de números. Como o número está na lista, a chamada operator.contains(numbers, 3) retorna True e a mensagem é impressa.

Suportando Testes de Associação em Classes Definidas pelo Usuário

Você também pode adicionar suporte para operações de teste de associação em suas próprias classes definindo os métodos __contains__() e __notcontains__().

Exemplo:

class MyList:
def __init__(self, values):
self.values = values
def __contains__(self, value):
return value in self.values
def __notcontains__(self, value):
return value not in self.values
my_list = MyList([1, 2, 3, 4, 5])
if 3 in my_list:
print("3 está presente na lista personalizada.")
if 6 not in my_list:
print("6 não está presente na lista personalizada.")

Saída:

3 está presente na lista personalizada.
6 não está presente na lista personalizada.

Neste exemplo, criamos uma classe chamada MyList que possui uma lista de valores. Definimos os métodos __contains__() e __notcontains__() para permitir a verificação de associação usando os operadores in e not in em instâncias dessa classe. Ao verificar a associação de um valor em my_list, os métodos correspondentes são chamados e a verificação é realizada.

Conclusão

Os operadores in e not in são ferramentas poderosas para realizar testes de associação em Python. Eles permitem que você verifique rapidamente se um valor está presente em uma coleção de valores, simplificando seu código e tornando-o mais legível.

Neste tutorial, você aprendeu como usar os operadores in e not in com diferentes tipos de dados, como listas, tuplas, strings, geradores, dicionários e conjuntos. Você também aprendeu sobre a função operator.contains() e como adicionar suporte para testes de associação em suas próprias classes.

Agora que você dominou o uso dos operadores de associação, você pode aplicar esse conhecimento em seus programas Python para realizar testes de associação eficientes e concisos.