将列表添加到集合
我该如何把一组值添加到一个已经存在的集合里呢?
13 个回答
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参考文档中的说明来覆盖这个行为。