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_uniquedemande à 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 array1qui ne sont pas dans array2. assume_uniqueest Falsepar 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 setdiff1ddans 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_2est pas unique: list2 = ["a", "f", "c", "m", "m"]. Conserver list1tel quel : list_1 = ["a", "b", "c", "d", "e"]
Définition de la valeur par défaut des assume_uniquerendements ["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_2qui n'apparaissent nulle part danslist_1ou des éléments danslist_2qui ne sont pas présents dans le même index danslist_1?