1203 votes

Obtenir des valeurs uniques dans une liste en python

Je veux obtenir les valeurs uniques de la liste suivante:

 [u'nowplaying'][u'PBS'][u'PBS'][u'nowplaying'][u'job'][u'debate'][u'thenandnow']
 

Le résultat que je demande est:

 [u'nowplaying'][u'PBS'][u'job'][u'debate'][u'thenandnow']
 

J'ai essayé le code suivant:

 for x in trends:
    if x not in output:
        output.append(x)
        print output
 

mais ça n'a pas marché. Toute aide serait appréciée.

1484voto

lefterav Points 1207

D'abord déclarer votre liste correctement, séparés par des virgules Vous pouvez obtenir les valeurs uniques par la conversion de la liste à un ensemble

mylist = [u'nowplaying', u'PBS', u'PBS', u'nowplaying', u'job', u'debate', u'thenandnow']
myset = set(mylist)
print myset

Si vous l'utilisez comme une liste, vous devez le convertir en retour à la liste en faisant

mynewlist = list(myset)

Une autre possibilité, probablement plus rapide serait d'utiliser un set depuis le début, au lieu d'une liste. Ensuite, votre code doit être

  output = set()
  for x in trends:
       output.add(x)
  print output

Comme il a été souligné, les ensembles de ne pas maintenir l'ordre original. Si vous en avez besoin, vous devez rechercher sur l' ensemble ordonné

122voto

Nicolas Barbey Points 2606

L'exemple que vous fournissez ne correspond pas aux listes de Python. Cela ressemble à un dict imbriqué, ce qui n'est probablement pas ce que vous vouliez.

Une liste de python:

 a = ['a', 'b', 'c', 'd', 'b']
 

Pour obtenir des éléments uniques, transformez-le en un ensemble (que vous pouvez reconvertir en une liste si nécessaire):

 b = set(a)
print b
>>> set(['a', 'b', 'c', 'd'])
 

111voto

Samuele Mattiuzzo Points 4769

quel type est votre variable de sortie?

Les ensembles Python sont ce dont vous avez besoin. Déclarez la sortie comme ceci

 output = set([]) # empty set
 

et vous êtes prêt à ajouter des éléments avec output.add (elem) et assurez-vous qu'ils sont uniques

AVERTISSEMENT: les ensembles ne conservent pas l'ordre d'origine de la liste

6voto

Senthil Kumaran Points 14934

La première chose, l'exemple que vous avez donné n'est pas une liste valide.

 example_list = [u'nowplaying',u'PBS', u'PBS', u'nowplaying', u'job', u'debate',u'thenandnow']
 

Supposons que ci-dessus soit la liste des exemples. Vous pouvez ensuite utiliser la recette suivante pour donner à l'exemple doc d'itertools qui peut renvoyer les valeurs uniques et préserver l'ordre que vous semblez exiger. L'itérable ici est la liste_exemple

 from itertools import ifilterfalse

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 ifilterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element
 

4voto

Ricky Wilson Points 112
def setlist(lst=[]):
   return list(set(lst))

Prograide.com

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.

Powered by:

X