添加列表进行设置?
问题内容:
在Python 2.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无法告诉我是否两次添加了相同的列表。有解决方法吗?
编辑:我想添加列表本身,而不是其元素。
问题答案:
您不能将列表添加到集合中,因为列表是可变的,这意味着您可以在将列表添加到集合后更改列表的内容。
但是,您可以将元组添加到集合中,因为您不能更改元组的内容:
>>> a.add(('f', 'g'))
>>> print a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
编辑 :某些解释:文档将a定义set
为 不同的可哈希对象的无序集合。
这些对象必须是可哈希化的,因此,与每次执行这些操作时都要查看每个单独的元素相比,查找,添加和删除元素可以更快地完成。Wikipedia文章中说明了使用的特定算法。在effbot.org上说明了Python的哈希算法,并且__hash__
在python参考中提供了pythons函数。
一些事实:
- 集合元素 以及 字典键 必须是可哈希的
- 一些不可散列的数据类型:
list
:tuple
改用set
:frozenset
改用dict
:没有官方对应文件,但有一些 食谱
- 默认情况下,对象实例是可哈希的,每个实例都有唯一的哈希。您可以按照python参考中的说明覆盖此行为。