如何将值列表添加到现有集?
当前回答
尝试使用* unpack,如下所示:
>>> a=set('abcde')
>>> a
{'a', 'd', 'e', 'b', 'c'}
>>> l=['f','g']
>>> l
['f', 'g']
>>> {*l, *a}
{'a', 'd', 'e', 'f', 'b', 'g', 'c'}
>>>
非编辑器版本:
a=set('abcde')
l=['f', 'g']
print({*l, *a})
输出:
{'a', 'd', 'e', 'f', 'b', 'g', 'c'}
其他回答
您将希望使用可哈希的元组(不能像列表那样对可变对象进行哈希)。
>>> a = set("abcde")
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> t = ('f', 'g')
>>> a.add(t)
>>> a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
希望这能有所帮助:
>>> seta = set('1234')
>>> listb = ['a','b','c']
>>> seta.union(listb)
set(['a', 'c', 'b', '1', '3', '2', '4'])
>>> seta
set(['1', '3', '2', '4'])
>>> seta = seta.union(listb)
>>> seta
set(['a', 'c', 'b', '1', '3', '2', '4'])
你想添加一个元组,而不是一个列表:
>>> a=set('abcde')
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> l=['f','g']
>>> l
['f', 'g']
>>> t = tuple(l)
>>> t
('f', 'g')
>>> a.add(t)
>>> a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
如果您有一个列表,您可以转换为元组,如上所示。元组是不可变的,所以它可以被添加到集合中。
添加列表的内容
使用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'}
添加列表本身
不可能直接将列表本身添加到set中,因为set元素必须是可哈希的。
相反,可以先将列表转换为元组:
>>> a = {('a', 'b', 'c')}
>>> xs = ['d', 'e']
>>> a.add(tuple(xs))
>>> a
{('a', 'b', 'c'), ('d', 'e')}
您不能将列表添加到集合中,因为列表是可变的,这意味着您可以在将列表添加到集合后更改列表的内容。
然而,你可以向集合中添加元组,因为你不能改变元组的内容:
>>> a.add(('f', 'g'))
>>> print a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
编辑:一些解释:文档将集合定义为不同哈希对象的无序集合。对象必须是可哈希的,这样查找、添加和删除元素可以比每次执行这些操作时查看每个单独的元素更快。维基百科的文章中解释了使用的具体算法。python的哈希算法在effbot.org上有解释,python参考中有Pythons __hash__函数。
一些事实:
集合元素和字典键都必须是可哈希的 一些不可哈希的数据类型: List:使用tuple代替 Set:使用frozenset代替 词典:没有官方对应的词典,但有一些 食谱 默认情况下,对象实例是可哈希的,每个实例都有唯一的哈希。如python参考中所述,您可以覆盖此行为。