如何在python中构建一个列表项集?

sec*_*ing 142 python list set

list在python中有一个文件名,我想构建一个set所有文件名.

filelist=[]
for filename in filelist:
    set(filename)
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.怎么办呢?

mgi*_*son 274

如果你有一个可清除对象列表(文件名可能是字符串,那么它们应该计算):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]
Run Code Online (Sandbox Code Playgroud)

你可以直接构建集合:

s = set(lst)
Run Code Online (Sandbox Code Playgroud)

事实上,set将以任何可迭代对象的方式工作! (鸭子打字不是很棒吗?)


如果你想迭代地做:

s = set()
for item in iterable:
    s.add(item)
Run Code Online (Sandbox Code Playgroud)

但是很少需要这样做.我只提到它,因为该set.add方法非常有用.


Ray*_*ger 12

最直接的解决方案是:

 s = set(filelist)
Run Code Online (Sandbox Code Playgroud)

原始代码中的问题是未将值分配给集合.这是您的代码的修复版本:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)
Run Code Online (Sandbox Code Playgroud)


Hel*_*bye 6

你可以做

my_set = set(my_list)
Run Code Online (Sandbox Code Playgroud)

或者,对于Python 3,

my_set = {*my_list}
Run Code Online (Sandbox Code Playgroud)

从列表创建一个集合。相反,您也可以

my_list = list(my_set)
Run Code Online (Sandbox Code Playgroud)

或者,对于Python 3,

my_list = [*my_set]
Run Code Online (Sandbox Code Playgroud)

从集合创建列表。

只需注意,将列表转换为集合时,列表中元素的顺序通常会丢失,因为集合本质上是无序的。(不过,CPython中的一个例外似乎是如果列表仅包含非负整数,但是我认为这是CPython中集合实现的结果,并且这种行为在不同的Python实现之间可能会有所不同。)


Adi*_* Ml 5

这是另一个解决方案:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我使用了 set 方法将它变成了一个集合,然后它从列表中删除了所有重复的值