TL; DR:
SOLUÇÃO (1)
import numpy as np
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
SOLUÇÃO (2) Você deseja uma lista ordenada
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
main_list = setdiff_sorted(list_2,list_1)
EXPLICAÇÕES:
(1) Você pode usar NumPy do setdiff1d( array1, array2, assume_unique= False).
assume_uniquepergunta ao usuário se as matrizes já são únicas.
Se False, então os elementos exclusivos são determinados primeiro.
Se True, a função assumirá que os elementos já são exclusivos E a função ignorará a determinação dos elementos exclusivos.
Isso resulta os valores exclusivos em array1que não são nos array2. assume_uniqueé Falsepor padrão.
Se você está preocupado com os elementos exclusivos (com base na resposta de Chinny84 ), basta usar (onde assume_unique=False=> o valor padrão):
import numpy as np
list_1 = ["a", "b", "c", "d", "e"]
list_2 = ["a", "f", "c", "m"]
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
(2)
Para quem deseja que as respostas sejam classificadas, criei uma função personalizada:
import numpy as np
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
Para obter a resposta, execute:
main_list = setdiff_sorted(list_2,list_1)
NOTAS LATERAIS:
(a) A solução 2 (função personalizada setdiff_sorted) retorna uma lista (comparada a uma matriz na solução 1).
(b) Se você não tem certeza se os elementos são únicos, use a configuração padrão de NumPy setdiff1dnas soluções A e B. O que pode ser um exemplo de complicação? Veja a nota (c).
(c) As coisas serão diferentes se uma das duas listas não for única.
Diga list_2não é único: list2 = ["a", "f", "c", "m", "m"]. Manter list1como está:list_1 = ["a", "b", "c", "d", "e"]
configurando o valor padrão dos assume_uniquerendimentos ["f", "m"](em ambas as soluções). No entanto, se você definir assume_unique=True, as duas soluções dão ["f", "m", "m"]. Por quê? Isso ocorre porque o usuário ASSUME que os elementos são únicos). Por isso, é melhor manterassume_uniqueao seu valor padrão. Observe que as duas respostas estão classificadas.
Pitãoentorpecido
list_2que não aparecem em nenhum lugarlist_1ou elementoslist_2que não estão presentes no mesmo índice emlist_1?