web-dev-qa-db-fra.com

Comment construire un ensemble d'éléments de liste en python?

J'ai un list de noms de fichiers dans python et je voudrais construire un set à partir de tous les noms de fichiers.

filelist=[]
for filename in filelist:
    set(filename)

Ça n'a pas l'air de fonctionner. Comment peut-on faire ça?

129
securecoding

Si vous avez une liste d'objets hashable (les noms de fichiers seraient probablement des chaînes, ils devraient donc compter):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]

vous pouvez construire le jeu directement:

s = set(lst)

En fait, set fonctionnera de cette façon avec n'importe quel objet itérable! (La frappe est-elle géniale?)


Si vous voulez le faire de manière itérative:

s = set()
for item in iterable:
    s.add(item)

Mais il est rarement nécessaire de le faire de cette façon. Je ne le mentionne que parce que la méthode set.add est très utile.

251
mgilson

La solution la plus directe est la suivante:

 s = set(filelist)

Le problème dans votre code d'origine est que les valeurs n'étaient pas attribuées à set. Voici la version corrigée de votre code:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)
12

Tu peux faire

my_set = set(my_list)

ou, pour Python 3,

my_set = {*my_list}

pour créer un ensemble à partir d'une liste. Inversement, vous pouvez aussi faire

my_list = list(my_set)

ou, pour Python 3,

my_list = [*my_set]

pour créer une liste à partir d'un ensemble.

Notez simplement que l'ordre des éléments dans une liste est généralement perdu lors de la conversion de la liste en un ensemble, car un ensemble est par nature non ordonné. (Une exception dans CPython, cependant, semble être si la liste ne comprend que des entiers non négatifs, mais je suppose que cela est une conséquence de l'implémentation des ensembles dans CPython et que ce comportement peut varier entre différents Python implémentations.)

5
HelloGoodbye

Voici une autre solution:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])

Dans ce code, j'ai utilisé la méthode set afin de le transformer en un ensemble, puis il a supprimé toutes les valeurs en double de la liste.

3
Adi Ml

Il suffit de mettre la ligne:

new_list = set(your_list)
0
muknerd