添加列表进行设置?

发布于 2021-01-29 16:26:22

在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无法告诉我是否两次添加了相同的列表。有解决方法吗?

编辑:我想添加列表本身,而不是其元素。

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您不能将列表添加到集合中,因为列表是可变的,这意味着您可以在将列表添加到集合后更改列表的内容。

    但是,您可以将元组添加到集合中,因为您不能更改元组的内容:

    >>> a.add(('f', 'g'))
    >>> print a
    set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
    

    编辑 :某些解释:文档将a定义set不同的可哈希对象的无序集合。
    这些对象必须是可哈希化的,因此,与每次执行这些操作时都要查看每个单独的元素相比,查找,添加和删除元素可以更快地完成。Wikipedia文章中说明了使用的特定算法。在effbot.org上说明了Python的哈希算法,并且__hash__python参考中提供了pythons函数。

    一些事实:

    • 集合元素 以及 字典键 必须是可哈希的
    • 一些不可散列的数据类型:
      • listtuple改用
      • setfrozenset改用
      • dict:没有官方对应文件,但有一些 食谱
    • 默认情况下,对象实例是可哈希的,每个实例都有唯一的哈希。您可以按照python参考中的说明覆盖此行为。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看