TL; DR:
SOLUTION (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`
SOLUTION (2) Vous voulez une liste triée
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)
EXPLICATION:
(1) Vous pouvez utiliser de NumPy setdiff1d
( array1
, array2
, assume_unique
= False
).
assume_unique
demande à l'utilisateur SI les tableaux SONT DÉJÀ UNIQUES.
Si False
, alors les éléments uniques sont déterminés en premier.
Si True
, la fonction supposera que les éléments sont déjà uniques ET la fonction ignorera la détermination des éléments uniques.
Cela donne les valeurs uniques dans array1
qui ne sont pas dans array2
. assume_unique
est False
par défaut.
Si vous êtes concerné par les éléments uniques (en fonction de la réponse de Chinny84 ), utilisez simplement (où assume_unique=False
=> la valeur par défaut):
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)
Pour ceux qui souhaitent que les réponses soient triées, j'ai créé une fonction personnalisée:
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
Pour obtenir la réponse, exécutez:
main_list = setdiff_sorted(list_2,list_1)
REMARQUES SUPPLÉMENTAIRES:
(a) La solution 2 (fonction personnalisée setdiff_sorted
) renvoie une liste (comparée à un tableau dans la solution 1).
(b) Si vous n'êtes pas sûr que les éléments soient uniques, utilisez simplement le paramètre par défaut de NumPy's setdiff1d
dans les deux solutions A et B. Qu'est-ce qui peut être un exemple de complication? Voir note (c).
(c) Les choses seront différentes si l'une des deux listes n'est pas unique.
Say list_2
est pas unique: list2 = ["a", "f", "c", "m", "m"]
. Conserver list1
tel quel : list_1 = ["a", "b", "c", "d", "e"]
Définition de la valeur par défaut des assume_unique
rendements ["f", "m"]
(dans les deux solutions). CEPENDANT, si vous définissez assume_unique=True
, les deux solutions donnent ["f", "m", "m"]
. Pourquoi? C'est parce que l'utilisateur a supposé que les éléments sont uniques). Par conséquent, il vaut mieux garderassume_unique
à sa valeur par défaut. Notez que les deux réponses sont triées.
pythonengourdi
list_2
qui n'apparaissent nulle part danslist_1
ou des éléments danslist_2
qui ne sont pas présents dans le même index danslist_1
?