在 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 文章中进行了解释。Python 散列算法在effbot.org和python 参考__hash__中的 python 函数中进行了解释。[
set
__hash__
一些事实:
list
tuple
frozenset
dict