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

170

J'ai un listdes noms de fichiers en python et je voudrais construire un setparmi tous les noms de fichiers.

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

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

codage sécurisé
la source

Réponses:

322

Si vous avez une liste d'objets hachables (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 directement l'ensemble:

s = set(lst)

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


Si vous souhaitez 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 set.addméthode est assez utile.

mgilson
la source
1
J'utilise 2.7 et cela ne semble pas fonctionner. Que se passe t-il ici? Python 2.7.13 (par défaut, 24 juillet 2017, 14:22:59) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] sur darwin Tapez "help", "copyright", "credits" ou "licence" pour plus d'informations. >>> x = [1,2,3] >>> set (x) set ([1, 2, 3]) >>>
opus111
@ user1902291 - On dirait que cela a fonctionné, il vous suffit de garder une trace de l'ensemble résultant: y = set(x)
mgilson
Notez également que l'ajout d'éléments dans l'ensemble à partir d'une liste peut s'avérer très utile lorsque vous souhaitez filtrer les doublons de la liste.
Pranjal Kumar
12

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 à l' ensemble . Voici la version corrigée de votre code:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)
Raymond Hettinger
la source
9

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 également 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 se compose uniquement d'entiers non négatifs, mais je suppose que c'est une conséquence de l'implémentation d'ensembles dans CPython et que ce comportement peut varier entre différentes implémentations Python.)

Bonjour au revoir
la source
4

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

Adi Ml
la source
1

Une façon générale de construire un ensemble de manière itérative comme ceci:

aset = {e for e in alist}
lbweek
la source
0

Mettez simplement la ligne:

new_list = set(your_list)
muknerd
la source