2014-11-13 50 views
1

拿這個例子:添加套到另一個列表的項目設置

setA = set("A") 
setB = set("B") 
list = [setA, setB] 

test = set("C") 
test.add(list) 

這給了我的預期TypeError: unhashable type: 'list'

我該如何獲得一套{'C', 'B', 'A'}

+0

不要使用相同的名稱像'list'內置函數命名變量。 – parchment

+0

@羊皮紙肯定,只是一個例子。 – Sven

+0

您是否認爲您要更改列表的內容? – boh

回答

2

您可以使用set.union

setA = set("A") 
setB = set("B") 
setC = set("C") 
my_list = [setA, setB, setC] 
result = set.union(*my_list) 

您現在正在試圖將一個列表添加到一組是不可能的。

如果你有test = set("C")那麼你可以做:

test |= setA | setB 

這也增加了setAsetB的內容test

+0

我對兩個集的訪問都是有限的(不使用循環),'test'已經實例化。 'test.union(* list)'只給我一個'{'C'}','test.update(set.union(* list))'給了我正確的結果,但是感覺不對。 – Sven

+1

'test.union'不會改變'test',所以你需要指定返回值:'test = test.union(* list)'。另外,'update'可以帶多個列表,所以你不需要先將它們聯合起來:'test.update(* list)'。 – chepner

+0

謝謝,剛剛瞭解了* -operator。謝謝 – Sven

0

您需要循環所有的集:

for s in list: 
    test |= s 
+0

'| ='是什麼意思?我從未見過它。 – boh

+0

@boh它是一個賦值操作符(如'+ =',' - ='),但是對於按位或('|') – parchment

+0

謝謝parchment =) – boh

1

您可以通過多個參數來test.update的內置功能更新

test.update(*thelist) 

幫助:

更新(...) 使用本身和其他人的聯合更新一組。

>>> setA = set("A") 
>>> setB = set("B") 
>>> L = [setA, setB] 
>>> test = set("C") 
>>> test.update(*L) # equivalent to calling test.update(setA, setB) 
>>> test 
set(['A', 'C', 'B']) 
相關問題