Ho un list
nome di file in Python e vorrei costruire un set
nome di tutti i nomi di file.
filelist=[]
for filename in filelist:
set(filename)
Questo non sembra funzionare. Come può farlo?
Ho un list
nome di file in Python e vorrei costruire un set
nome di tutti i nomi di file.
filelist=[]
for filename in filelist:
set(filename)
Questo non sembra funzionare. Come può farlo?
Risposte:
Se hai un elenco di oggetti hash (i nomi dei file probabilmente sarebbero stringhe, quindi dovrebbero contare):
lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]
puoi costruire il set direttamente:
s = set(lst)
In effetti, set
funzionerà in questo modo con qualsiasi oggetto iterabile! (L'anatra non sta scrivendo alla grande?)
Se vuoi farlo iterativamente:
s = set()
for item in iterable:
s.add(item)
Ma raramente è necessario farlo in questo modo. Lo cito solo perché il set.add
metodo è abbastanza utile.
y = set(x)
La soluzione più diretta è questa:
s = set(filelist)
Il problema nel codice originale è che i valori non venivano assegnati al set . Ecco la versione corretta del tuo codice:
s = set()
for filename in filelist:
s.add(filename)
print(s)
Tu puoi fare
my_set = set(my_list)
o, per Python 3,
my_set = {*my_list}
per creare un set da un elenco. Al contrario, puoi anche farlo
my_list = list(my_set)
o, per Python 3,
my_list = [*my_set]
per creare un elenco da un set.
Si noti che l'ordine degli elementi in un elenco viene generalmente perso durante la conversione dell'elenco in un set poiché un set è intrinsecamente non ordinato. (Un'eccezione in CPython, tuttavia, sembra essere se l'elenco è costituito solo da numeri interi non negativi, ma suppongo che questa sia una conseguenza dell'implementazione di set in CPython e che questo comportamento possa variare tra diverse implementazioni di Python.)