Python 将列表中的元素添加到集合中?
我正在尝试将列表列表中的元素添加到集合中。例如,如果我有Python 将列表中的元素添加到集合中?,python,list,set,Python,List,Set,我正在尝试将列表列表中的元素添加到集合中。例如,如果我有 new_list=[['blue','purple'],['black','orange','red'],['green']] 我将如何收到 new_set=(['blue','purple'],['black','orange','red'],['green']) 我正试图这样做,这样我就可以使用交集来找出哪些元素出现在两个集合中。我想这会有用的 results=set() results2=set() for element in
new_list=[['blue','purple'],['black','orange','red'],['green']]
我将如何收到
new_set=(['blue','purple'],['black','orange','red'],['green'])
我正试图这样做,这样我就可以使用交集来找出哪些元素出现在两个集合中。我想这会有用的
results=set()
results2=set()
for element in new_list:
results.add(element)
for element in new_list2:
results2.add(element)
results3=results.intersection(results2)
但我一直收到:
TypeError: unhashable type: 'list'
出于某种原因。将内部列表转换为元组,因为集合只允许存储可散列(不可变)对象: 我将如何收到
new_set=(['blue','purple'],['black','orange','red'],['green'])
好吧,尽管名称有误导性,但这不是任何东西的集合,而是列表的元组。要将列表
的列表
转换为列表
的元组
,请执行以下操作:
new_set = tuple(new_list)
也许你想收到这个
new_set=set([['blue','purple'],['black','orange','red'],['green']])
如果是的话……你不能。set
不能包含像list
s这样的不可损坏的值。这就是TypeError
告诉您的
如果这不是问题,您所要做的就是写:
new_set = set(new_list)
而您编写的任何更复杂的代码都会遇到与调用set
完全相同的问题,因此没有任何棘手的解决方法
当然,您可以有一个集合的元组,因为它们是可散列的。所以,也许你想要这个:
new_set=set([('blue','purple'),('black','orange','red'),('green')])
那也很容易。假设您的内部列表
s保证只包含字符串(或其他可散列值),如您的示例所示,它只是:
new_set = set(map(tuple, new_list))
或者,如果使用基于排序的集合类,则不需要哈希值,只需要完全排序的值。例如:
new_set = sortedset(new_list)
Python在标准库中没有这样的东西,但是您可以安装一些很棒的第三方实现,比如或
当然,排序集操作通常不如散列操作快,但通常它们已经足够好了。(举个具体的例子,如果列表中有100万项,哈希将使每次查找速度加快100万倍;排序只会使查找速度加快50000倍。)
基本上,任何你可以描述或给出一个例子的输出,我们可以告诉你如何得到它,或者它不是一个你可以得到的有效对象……但是首先你必须告诉我们你真正想要什么
顺便说一下,如果你想知道为什么list
s不可散列,那只是因为它们是可变的。如果您想知道为什么大多数可变类型都不可散列,请解释。在将元素添加到集合之前将其设置为元组:
new_list=[['blue','purple'],['black','orange','red'],['green']]
new_list2=[['blue','purple'],['black','green','red'],['orange']]
results=set()
results2=set()
for element in new_list:
results.add(tuple(element))
for element in new_list2:
results2.add(tuple(element))
results3=results.intersection(results2)
print results3
结果:
set([('blue', 'purple')])
集合元素必须是可散列的
- 要将列表添加到集合中,请改用tuple
- 要将集合添加到集合中,请改用frozenset
set([('blue', 'purple')])