如何在python中构造一组列表项?


170

list在python中有一个文件名,我想set从所有文件名中构造一个。

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

这似乎不起作用。怎么办

Answers:


322

如果您具有可散列对象的列表(文件名可能是字符串,那么它们应该算在内):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]

您可以直接构造集合:

s = set(lst)

实际上,set将这种方式与任何可迭代对象一起使用! (鸭子打字不好吗?)


如果要迭代进行:

s = set()
for item in iterable:
    s.add(item)

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


1
我正在使用2.7,这似乎不起作用。这里发生了什么?darwin上的Python 2.7.13(默认值,2017年7月24日,14:22:59)[GCC 4.2.1兼容的Apple LLVM 8.1.0(clang-802.0.42)]输入“帮助”,“版权”,“信用”或“许可证”以获取更多信息。>>> x = [1,2,3] >>> set(x)set([1、2、3])>>>
opus111

@ user1902291--看起来很有效,您只是在跟踪结果集: y = set(x)
mgilson

还要注意,当您要从列表中过滤出重复项时,从列表中添加项目在集合中可能会非常有用。
Pranjal Kumar

12

最直接的解决方案是:

 s = set(filelist)

原始代码中的问题是未将值分配给集合。这是您的代码的固定版本:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)

9

你可以做

my_set = set(my_list)

或者,对于Python 3,

my_set = {*my_list}

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

my_list = list(my_set)

或者,对于Python 3,

my_list = [*my_set]

从集合创建列表。

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


4

这是另一种解决方案:

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

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


1

一种像这样的迭代方式构造集合的一般方法:

aset = {e for e in alist}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.