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?
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.
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)
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.)
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.
Il suffit de mettre la ligne:
new_list = set(your_list)