2013-04-02 49 views

回答

134

如果您有可哈希对象列表(文件名很可能是字符串,所以应该算):

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方法非常有用。

+0

我正在使用2.7,这似乎不起作用。这里发生了什么? Python 2.7。13(default,2017年7月24日14:22:59) darwin [GCC 4.2.1 Compatible Apple LLVM 8.1.0(clang-802.0.42)]键入“help”,“copyright”,“credits”或“许可”了解更多信息。 >>> x = [1,2,3] >>> set(x) set([1,2,3]) >>> – user1902291

+0

@ user1902291--它看起来很有效,跟踪结果集:'y = set(x)' – mgilson

7

最直接的解决办法是这样的:

s = set(filelist) 

在原始代码的问题是,这些值没有被分配到设置。这里是你的代码的固定式版本:

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

这里是另一种解决方案:

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

在这段代码中我使用了一套方法,以便把它变成一组,然后将其删除列表中的所有重复值

0

你可以做

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实现之间可能会有所不同。)

相关问题