Tenho duas listas que preciso combinar, onde a segunda lista tem quaisquer duplicatas da primeira lista ignoradas. .. Um pouco difícil de explicar, então deixe-me mostrar um exemplo de como o código se parece e o que eu quero como resultado.
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]
# The result of combining the two lists should result in this list:
resulting_list = [1, 2, 2, 5, 7, 9]
Você notará que o resultado tem a primeira lista, incluindo seus dois valores "2", mas o fato de que second_list também tem um valor adicional de 2 e 5 não é adicionado à primeira lista.
Normalmente, para algo assim, eu usaria conjuntos, mas um conjunto em first_list limparia os valores duplicados que já possui. Portanto, estou simplesmente imaginando qual é a maneira melhor / mais rápida de conseguir essa combinação desejada.
Obrigado.
second_list
?Respostas:
Você precisa acrescentar à primeira lista os elementos da segunda lista que não estão na primeira - os conjuntos são a maneira mais fácil de determinar quais elementos eles são, como este:
Ou se você preferir one-liners 8-)
fonte
2
em seu resultado, quando deveria haver dois deles.fonte
set
. 👍Você pode usar conjuntos:
fonte
Você pode reduzir isso a uma única linha de código se usar numpy:
fonte
fonte
fonte
O mais simples para mim é:
fonte
TypeError: unhashable type: 'dict'
)Você também pode combinar as respostas de RichieHindle e Ned Batchelder para um algoritmo O (m + n) de caso médio que preserva a ordem:
Observe que
x in s
tem uma complexidade de pior caso de O (m) , então a complexidade de pior caso deste código ainda é O (m * n) .fonte
Isso pode ajudar
A função de união mescla a segunda lista na primeira, sem duplicar um elemento de a, se já estiver em a. Semelhante a definir operador de união. Esta função não muda b. Se a = [1,2,3] b = [2,3,4]. Após a união (a, b) faz a = [1,2,3,4] e b = [2,3,4]
fonte
Com base na receita :
fonte
[1, 2, 2, 5, 7, 9]
fonte