Como comparar duas listas python

Quero pegar duas listas e encontrar os valores que aparecem em ambas.

a = [1, 2, 3, 4, 5] b = [9, 8, 7, 6, 5] returnMatches(a, b)

retornaria [5], por exemplo.

Como posso comparar duas listas em python e retornar correspondências find: Questions

Como posso comparar duas listas em python e retornar correspondências StackOverflow: Questions

Este artigo trata da tarefa de verificar se duas listas não ordenadas contêm elementos exatamente semelhantes em posições exatamente semelhantes, ou seja, verificar se duas listas são exatamente iguais. Este é um utilitário bastante útil e pode ser usado na programação do dia-a-dia.

Método 1: Usar list.sort()e ==operador
sort() juntamente com ==operador pode realizar esta tarefa. Primeiro classificamos a lista, de modo que se ambas as listas forem idênticas, então elas terão elementos na mesma posição. Mas isso não leva em consideração a ordem dos elementos na lista.

test_list1 = [1, 2, 4, 3, 5] test_list2 = [1, 2, 4, 3, 5] print ("The first list is : " + str(test_list1)) print ("The second list is : " + str(test_list2)) test_list1.sort() test_list2.sort() if test_list1 == test_list2:     print ("The lists are identical") else :     print ("The lists are not identical")

Resultado :

A primeira lista é: [1, 2, 4, 3, 5] A segunda lista é: [1, 2, 4, 3, 5] As listas são idênticas

Método 2: Usandocollections.Counter()
Usando Counter(), normalmente conseguimos obter a frequência de cada elemento da lista, verificando, para ambas as listas podemos verificar se duas listas são idênticas ou não. Mas esse método também ignora a ordem dos elementos na lista e leva em consideração apenas a frequência dos elementos.

import collections test_list1 = [1, 2, 4, 3, 5] test_list2 = [1, 2, 4, 3, 5] print ("The first list is : " + str(test_list1)) print ("The second list is : " + str(test_list2)) if collections.Counter(test_list1) == collections.Counter(test_list2):     print ("The lists are identical") else :     print ("The lists are not identical")

Resultado :



A primeira lista é: [1, 2, 4, 3, 5] A segunda lista é: [1, 2, 4, 3, 5] As listas são idênticas

Método 3: Usandosum() + zip() + len()
Usando sum() + zip(), podemos obter a soma de um da lista como a soma de 1 se ambos os índices nas duas listas tiverem elementos iguais e, em seguida, comparar esse número com o tamanho da outra lista. Isso também exige que primeiro verifique se duas listas são iguais antes deste cálculo. Ele também verifica o pedido.

test_list1 = [1, 2, 4, 3, 5] test_list2 = [1, 2, 4, 3, 5] print ("The first list is : " + str(test_list1)) print ("The second list is : " + str(test_list2)) if len(test_list1)== len(test_list2) and len(test_list1) == sum([1 for i, j in zip(test_list1, test_list2) if i == j]):     print ("The lists are identical") else :     print ("The lists are not identical")

Resultado :

A primeira lista é: [1, 2, 4, 3, 5] A segunda lista é: [1, 2, 4, 3, 5] As listas são idênticas

Método 4: usandoreduce() + map()
cuidadosamente o acoplamento de poder de map() a valores de hash e utilidade de reduce(), podemos realizar esta tarefa de verificar a igualdade de duas listas para serem idênticas. Isso também leva em consideração a ordem da lista.

import functools test_list1 = [1, 2, 4, 3, 5] test_list2 = [1, 2, 4, 3, 5] print ("The first list is : " + str(test_list1)) print ("The second list is : " + str(test_list2)) if functools.reduce(lambda i, j : i and j, map(lambda m, k: m == k, test_list1, test_list2), True) :      print ("The lists are identical") else :     print ("The lists are not identical")

Resultado :

A primeira lista é: [1, 2, 4, 3, 5] A segunda lista é: [1, 2, 4, 3, 5] As listas são idênticas

Tempo estimado de leitura: 2 atas

Muitas vezes vai ser-lhe pedido para comparar listas, e você precisa de uma maneira rápida para completar.

Aqui vamos percorrer três maneiras de completar isto, se você tiver mais comentários abaixo.

Laçada para encontrar valores comuns entre listas

Um simples loop pode ajudá-lo a encontrar dados que são comuns a duas listas:

# comparar para valores semelhantes lista1 = ["1", "2", "3", "4"] lista2 = ["1", "2", "3", "4", "5"] para i na lista1: para j na lista2: se i na lista j: imprimir(i)

que cede:

1 2 3 4

Comparar para um item de uma lista e não para a outra

Talvez haja momentos em que você deseje encontrar apenas os valores que estão em uma lista e não na outra.

Abaixo usamos uma linha de código usando a compreensão de lista, que faz o mesmo que um loop:

lista1 = ["1", "2", "3", "4"] lista2 = ["1", "2", "3", "4", "5"] para o item em [x para x na lista2 se x não estiver na lista1]: imprimir(item)

o que dá o resultado de:

5

comparar listas usando o método set

A terceira via utiliza conjuntos python, que essencialmente encontra a intersecção entre duas listas, como um diagrama Venn.

Aqui usamos o conjunto para encontrar os valores que não são comuns a cada lista usando a subtração:

lista1 = ["1", "2", "3", "4"] lista2 = ["1", "2", "3", "4", "5"] a = set(list1) b = set(list2) c = b-a imprimir(c)

o que te dá:

{'5'}

Alternativamente, você poderia encontrar o que é comum a ambos:

lista1 = ["1", "2", "3", "4"] lista2 = ["1", "2", "3", "4", "5"] a = set(list1) b = set(list2) c = a.intersecção(b) imprimir(c)

e o seu resultado será:

{'1', '3', '4', '2'}

Lembre-se que a utilização de conjuntos irá devolvê-los sem ordem, se você quiser que eles sejam encomendados, então aplique o seguinte ao código acima:

a = set(list1) b = set(list2) c = a.intersecção(b) d=sorted(c) impressão(tipo(d)) imprimir(d)

e a saída será:

<class 'list'> ['1', '2', '3', '4']

Uma coisa a notar é que o método classificado acima retorna o conjunto como uma lista e não como um conjunto.

Há muitos recursos online onde você pode aprender sobre conjuntos.

Outro exemplo com strings poderia ser feito dessa forma:

Se gostaria de subtrair os elementos iguais:

uma_lista = ['oi', 'bem', 'certo'] outra_lista = ['oi', 'belo', 'jeito'] iguais = [elemento for elemento in uma_lista if elemento in outra_lista] print(iguais) Resultado ['oi']

Se gostaria de retornar somente a interseção de todas as letras contidas nas listas:

lista1 = [] lista2 = [] uma_lista = ['oi', 'bem', 'certo'] outra_lista = ['oi', 'belo', 'jeito'] for pos, palavras in enumerate(uma_lista): lista1 += palavras for pos, palavras in enumerate(outra_lista): lista2 += palavras lista1 = set(lista1) lista2 = set(lista2) print(lista1-lista2) Resultado: {'b', 't', 'e', 'i', 'o'}