J'ai une liste et s'il y a 2 éléments avec les mêmes valeurs je veux n'en garder qu'un
[1,2,3]
et je veux que le résultat soit:
l = [1,2,3,2,2]
comment puis-je faire cela?
3 Réponses :
vous pouvez utiliser set () et list():
dict.fromkeys([1,2,3,2,2])
# Output: {1: None, 2: None, 3: None}
set () supprime tous les doublons, sans nécessairement préserver l'ordre. list () convertit l'ensemble {1, 2, 3} en une liste Comme les dictionnaires sont classés dans les versions ultérieures de Python, ceci:
list(dict.fromkeys([1,2,3,2,2]).keys()) # Output: [1, 2, 3]
conservera l'ordre sur Python 3.7+, contrairement à set () .
Remarque :
list(set([1,2,3,2,2])) # Output: [1, 2, 3]
Nous générons un dictionnaire (sensible à l'ordre), en utilisant les éléments de la liste comme clés.
Les clés de dictionnaire, comme les ensembles, sont hachées et donc uniques - toutes les répétitions de la liste sont supprimées
Notez que l'utilisation d'un set annule l'ordre des éléments de la liste d'origine.
@nosklo true, a proposé une autre solution pour Python 3.7+ via dict ()
Si vous souhaitez conserver les éléments de la liste d'origine dans le même ordre, utilisez la recette unique_everseen de itertools documentation :
print(list(unique_everseen(l)))
Utilisation:
def unique_everseen(iterable, key=None):
"List unique elements, preserving order. Remember all elements ever seen."
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
# unique_everseen('ABBCcAD', str.lower) --> A B C D
seen = set()
seen_add = seen.add
if key is None:
for element in filterfalse(seen.__contains__, iterable):
seen_add(element)
yield element
else:
for element in iterable:
k = key(element)
if k not in seen:
seen_add(k)
Si vous souhaitez conserver l'ordre des éléments, vous pouvez opter pour cette approche
list({s:None for s in l}.keys())
Si l'ordre n'est pas important, vous pouvez le faire en une seule ligne comme mentionné précédemment
XXX
Une autre solution en une ligne qui conservera l'ordre des éléments est (Notez que le dictionnaire conserve l'ordre des éléments en python 3.6+)
list(set(l))
l = list (set (l))Set est une structure qui n'autorise que des éléments uniques.Si vous recherchez dans votre navigateur "Python remove list duplicates", vous trouverez des références qui peuvent expliquer cela bien mieux que ce que nous pouvons gérer ici.