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_unique
pergunta 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 array1
que não são nos array2
. assume_unique
é False
por 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 setdiff1d
nas 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_2
não é único: list2 = ["a", "f", "c", "m", "m"]
. Manter list1
como está:list_1 = ["a", "b", "c", "d", "e"]
configurando o valor padrão dos assume_unique
rendimentos ["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_unique
ao seu valor padrão. Observe que as duas respostas estão classificadas.
Pitãoentorpecido
list_2
que não aparecem em nenhum lugarlist_1
ou elementoslist_2
que não estão presentes no mesmo índice emlist_1
?