Subtracção de Lista em Python

Rayven Esplanada 10 outubro 2023
  1. Converter lista para set para executar subtracção de lista em Python
  2. Utilizar a compreensão da lista para obter a diferença da lista em Python
Subtracção de Lista em Python

Este tutorial demonstra como executar a subtracção de lista, ou por outras palavras, lista menos lista em Python.

Como definido pela teoria do array em matemática, a diferença de dois conjuntos refere-se aos elementos de um array que não existem no outro array.

Por exemplo, se declararmos estas duas listas:

list1 = [1, 2, 4]
list2 = [2, 3]

A diferença de list1 - list2 seria [1, 4], enquanto list2 - list1 seria [3].

Converter lista para set para executar subtracção de lista em Python

As operações teóricas de conjuntos são suportadas em Python. No entanto, apenas o tipo de dados set suporta estas operações. Portanto, para utilizar a operação set, as listas têm de ser convertidas em conjuntos. Isto é possível enrolando uma lista em torno da função set().

Nota: A conversão de uma lista em conjunto irá remover qualquer tipo de ordem e remover valores duplicados da lista.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

print("A - B = ", setA - setB)

Resultado:

A - B =  {1, 4, 9, 14}

O resultado produz a diferença entre os dois conjuntos e remove os valores duplicados.

Podemos utilizar a função list() para converter o resultado de um set para uma lista.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

list_diff = list(setA - setB)

print("A - B: ", list_diff)

Resultado:

A - B:  [1, 4, 9, 14]

Utilizar a compreensão da lista para obter a diferença da lista em Python

A compreensão da lista pode ser utilizada para verificar se um elemento só existe na primeira lista mas não existe na segunda lista. Esta solução permite realizar a operação de diferença sem converter a lista num array.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]

listSub = [elem for elem in listA if elem not in listB]

print("A - B =", listSub)

Resultado:

A - B = [1, 4, 9, 14, 14]

Esta solução não interfere com a ordem da lista e elimina as duplicações.

Contudo, o valor 11 é repetido duas vezes em listA, e ambas as iterações de 11 são removidas do resultado de A - B, uma vez que 11 existe em ambos os conjuntos. Este comportamento é o esperado.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artigo relacionado - Python List