2013-04-02 72 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實現之間可能會有所不同。)

相關問題