Eu tenho um list
dos nomes de arquivos em python e gostaria de criar um set
de todos os nomes de arquivos.
filelist=[]
for filename in filelist:
set(filename)
Isso não parece funcionar. Como pode fazer isso?
Eu tenho um list
dos nomes de arquivos em python e gostaria de criar um set
de todos os nomes de arquivos.
filelist=[]
for filename in filelist:
set(filename)
Isso não parece funcionar. Como pode fazer isso?
Respostas:
Se você tiver uma lista de objetos que podem ser lavados (os nomes de arquivos provavelmente seriam cadeias de caracteres, então eles devem contar):
lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]
você pode construir o conjunto diretamente:
s = set(lst)
De fato, set
funcionará dessa maneira com qualquer objeto iterável! (A digitação do pato não é ótima?)
Se você quiser fazer iterativamente:
s = set()
for item in iterable:
s.add(item)
Mas raramente é necessário fazê-lo dessa maneira. Eu apenas menciono isso porque o set.add
método é bastante útil.
y = set(x)
A solução mais direta é esta:
s = set(filelist)
O problema no seu código original é que os valores não estavam sendo atribuídos ao conjunto . Aqui está a versão corrigida do seu código:
s = set()
for filename in filelist:
s.add(filename)
print(s)
Você pode fazer
my_set = set(my_list)
ou, para Python 3,
my_set = {*my_list}
para criar um conjunto a partir de uma lista. Por outro lado, você também pode fazer
my_list = list(my_set)
ou, para Python 3,
my_list = [*my_set]
para criar uma lista de um conjunto.
Observe que a ordem dos elementos em uma lista geralmente é perdida ao converter a lista em um conjunto, pois um conjunto é inerentemente desordenado. (Uma exceção no CPython, no entanto, parece ser se a lista consiste apenas em números inteiros não negativos, mas presumo que isso seja uma consequência da implementação de conjuntos no CPython e que esse comportamento pode variar entre diferentes implementações do Python.)