在Python2.6解释器上测试:
>>> a=set('abcde')
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> l=['f','g']
>>> l
['f', 'g']
>>> a.add(l)
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
a.add(l)
TypeError: list objects are unhashable
我想我无法将列表添加到集合中,因为Python无法判断我是否已将同一列表添加了两次。有解决办法吗?
编辑:我想添加列表本身,而不是其元素。
不能将列表添加到集合,因为列表是可变的,这意味着您可以在将列表添加到集合后更改列表的内容。
但是,您可以向集合中添加元组,因为您无法更改元组的内容:
编辑:一些解释:文档将
set
定义为不同散列对象的无序集合。对象必须是可散列的,这样查找、添加和删除元素的速度就可以比每次执行这些操作时查看每个元素的速度快。使用的特定算法在Wikipedia article中进行了说明。Pythons散列算法在effbot.org函数和python reference函数中解释。一些事实:
list
:改用tuple
set
:改用frozenset
dict
:没有正式的对应项,但是有一些 recipes要将列表元素添加到集合中,请使用
update
来自https://docs.python.org/2/library/sets.html
例如
如果要将整个列表作为单个元素添加到集合中,则不能,因为列表不可散列。您可以添加一个元组,例如
s.add(tuple(l))
。有关详细信息,请参见TypeError: unhashable type: 'list' when using built-in set function。使用^{} 或
|=
编辑:如果要添加列表本身而不是其成员,则很遗憾,必须使用元组。集合成员必须是hashable。
相关问题 更多 >
编程相关推荐