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?
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?
Réponses:
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:
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)
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.)