J'ai une liste en Python, comment puis-je rendre ses valeurs uniques?
Merci.
J'ai une liste en Python, comment puis-je rendre ses valeurs uniques?
Merci.
Le plus simple consiste à convertir en ensemble puis en liste:
my_list = list(set(my_list))
Un inconvénient avec ceci est qu'il ne préservera pas l'ordre. Vous voudrez peut-être aussi déterminer si un ensemble serait une meilleure structure de données à utiliser en premier lieu, au lieu d'une liste.
Des versions modifiées de http://www.peterbe.com/plog/uniqifiers-benchmark
Pour conserver l'ordre:
def f(seq): # Order preserving
''' Modified version of Dave Kirby solution '''
seen = set()
return [x for x in seq if x not in seen and not seen.add(x)]
OK, maintenant, comment ça fonctionne, parce que c'est un peu difficile ici if x not in seen and not seen.add(x)
:
In [1]: 0 not in [1,2,3] and not print('add')
add
Out[1]: True
Pourquoi ne revient-elle Vraie? imprimer (et réglez-le.ajouter) ne retourne rien:
In [3]: type(seen.add(10))
Out[3]: <type 'NoneType'>
et not None == True
, mais:
In [2]: 1 not in [1,2,3] and not print('add')
Out[2]: False
Pourquoi faut-il imprimer 'ajouter' dans [1], mais pas dans [2]? Voir False and print('add')
, et ne vérifie pas le deuxième argument, parce qu'il connaît déjà la réponse, et renvoie true si les deux arguments sont Vrais.
Plus générique, plus lisible, générateur de fonction, ajoute la capacité de transformer les valeurs d'une fonction:
def f(seq, idfun=None): # Order preserving
return list(_f(seq, idfun))
def _f(seq, idfun=None):
''' Originally proposed by Andrew Dalke '''
seen = set()
if idfun is None:
for x in seq:
if x not in seen:
seen.add(x)
yield x
else:
for x in seq:
x = idfun(x)
if x not in seen:
seen.add(x)
yield x
Sans ordonnance (c'est plus rapide):
def f(seq): # Not order preserving
return list(set(seq))
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.