我怎麼會收到
new_set=(['blue','purple'],['black','orange','red'],['green'])
好了,儘管誤導性的名稱,那不是set
的任何東西,那是tuple
的list
s。向list
個list
轉換成list
的tuple
S:
new_set = tuple(new_list)
也許你想收到此?
new_set=set([['blue','purple'],['black','orange','red'],['green']])
如果是這樣......你不能。 A set
不能包含像list
s這樣的不可取值。這就是TypeError
告訴你的。
如果這不是一個問題,所有你需要做的就是寫:
new_set = set(new_list)
,任何事情變得更復雜,你會寫有完全相同的問題,只是打電話set
,所以沒有貓膩繞過它。
當然你也可以有tuple
的set
一個S,因爲他們是哈希的。所以,也許你想這樣:
new_set=set([('blue','purple'),('black','orange','red'),('green')])
這也很簡單。假設你的內心list
s的保證僅僅包含字符串(或其他可哈希值),在您的例子,它只是:
new_set = set(map(tuple, new_list))
或者,如果您使用的是基於排序集類,你不不需要可哈希值,只需要完全有序的值。例如:
new_set = sortedset(new_list)
Python不附帶的標準庫這樣的事情,但也有一些偉大的第三方實現,你可以安裝,像blist.sortedset
或bintrees.FastRBTree
。
當然,排序集操作並不像散列操作一般快,但通常它們還不夠好。 (對於一個具體的例子,如果你在列表中有1條億件,散列會讓每個查找快100萬次;排序只會使其更快50000次)
基本上,任何輸出可以形容或舉一個例子,我們可以告訴你如何得到那個,或者它不是一個你可以得到的有效對象......但首先你必須告訴我們你實際上想要什麼。
順便說一句,如果你想知道爲什麼list
s爲沒有哈希的,這只是因爲他們是可變的。如果你想知道爲什麼大多數可變類型不可散列,那麼the FAQ解釋說。