我怎么会收到
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解释说。