将列表添加到集合

418 投票
13 回答
590492 浏览
提问于 2025-04-15 13:45

我该如何把一组值添加到一个已经存在的集合里呢?

13 个回答

98

把一个列表的元素添加到一个集合里,可以使用 update 方法。

详细信息可以查看 这个链接

s.update(t):这会把列表 t 的元素添加到集合 s 中。

举个例子:

>>> s = set([1, 2])
>>> l = [3, 4]
>>> s.update(l)
>>> s
{1, 2, 3, 4}

如果你想把整个列表作为一个单独的元素添加到集合里,那是不行的,因为列表是不可哈希的。你可以改为添加一个元组,比如 s.add(tuple(l))。想了解更多信息,可以查看 这个链接,里面有关于这个问题的更多解释。

917

将列表的内容添加到集合中

可以使用 set.update() 方法或者 |= 操作符来实现:

>>> a = set('abc')
>>> a
{'a', 'b', 'c'}

>>> xs = ['d', 'e']
>>> a.update(xs)
>>> a
{'e', 'b', 'c', 'd', 'a'}

>>> xs = ['f', 'g']
>>> a |= set(xs)
>>> a
{'e', 'b', 'f', 'c', 'd', 'g', 'a'}

将整个列表添加到集合中

直接将整个列表添加到集合里是不行的,因为集合里的元素必须是 可哈希的

不过,可以先把列表转换成元组再添加:

>>> a = {('a', 'b', 'c')}

>>> xs = ['d', 'e']
>>> a.add(tuple(xs))
>>> a
{('a', 'b', 'c'), ('d', 'e')}
253

你不能把列表添加到集合里,因为列表是可变的,这意味着你可以在把它放进集合后改变列表的内容。

不过,你可以把元组添加到集合里,因为元组的内容是不能改变的:

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

补充说明: 这里有一些解释:文档中把集合定义为一种无序的、由不同的可哈希对象组成的集合。 这些对象必须是可哈希的,这样在查找、添加和删除元素时,就能比每次都查看每个元素要快。具体使用的算法在维基百科文章中有解释。Python的哈希算法在effbot.org上有介绍,Python的__hash__函数在Python参考文档中也有说明。

一些事实:

  • 集合元素字典键都必须是可哈希的
  • 一些不可哈希的数据类型:
  • list:用tuple代替
  • set:用frozenset代替
  • dict:没有官方的对应类型,但有一些解决方案
  • 对象实例默认是可哈希的,每个实例都有一个独特的哈希值。你可以按照Python参考文档中的说明来覆盖这个行为。

撰写回答