Como construir um conjunto de itens da lista em python?

170

Eu tenho um listdos nomes de arquivos em python e gostaria de criar um setde todos os nomes de arquivos.

filelist=[]
for filename in filelist:
    set(filename)

Isso não parece funcionar. Como pode fazer isso?

codificação de segurança
fonte

Respostas:

322

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, setfuncionará 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.addmétodo é bastante útil.

mgilson
fonte
1
Estou usando o 2.7 e isso não parece funcionar. O que está acontecendo aqui? Python 2.7.13 (padrão, 24 de julho de 2017, 14:22:59) [Apple LLVM 8.1.0 compatível com GCC 4.2.1 (clang-802.0.42)] no darwin Digite "help", "copyright", "credits" ou "licença" para mais informações. >>> x = [1,2,3] >>> set (x) set ([1, 2, 3]) >>>
opus111
@ user1902291-- Parece que funcionou, basta procurar o conjunto resultante: y = set(x)
mgilson
Observe também que adicionar itens ao conjunto de uma lista pode ser muito útil quando você deseja filtrar duplicatas da lista.
Pranjal Kumar
12

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)
Raymond Hettinger
fonte
9

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.)

Olá adeus
fonte
4

Aqui está outra solução:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])

Neste código, usei o método set para transformá-lo em um conjunto e, em seguida, ele removeu todos os valores duplicados da lista

Adi Ml
fonte
1

Uma maneira geral de construir conjuntos de maneira iterativa como esta:

aset = {e for e in alist}
lbsweek
fonte
0

Basta colocar a linha:

new_list = set(your_list)
muknerd
fonte