J'ai un list
des noms de fichiers en python et je voudrais construire un set
parmi tous les noms de fichiers.
filelist=[]
for filename in filelist:
set(filename)
Ça n'a pas l'air de fonctionner. Comment faire ça?
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, set
fonctionnera 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.add
méthode est assez utile.
y = set(x)
La solution la plus directe est la suivante:
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:
la source
Tu peux faire
ou, pour Python 3,
pour créer un ensemble à partir d'une liste. Inversement, vous pouvez également faire
ou, pour Python 3,
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.)
la source
Voici une autre solution:
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
la source
Une façon générale de construire un ensemble de manière itérative comme ceci:
la source
Mettez simplement la ligne:
la source