如何将值列表添加到现有集?


当前回答

你想添加一个元组,而不是一个列表:

>>> 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')}

若要将列表中的元素添加到集合中,请使用update

从https://docs.python.org/2/library/sets.html

s.update(t):返回包含从t中添加的元素的集合s

E.g.

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

如果您想将整个列表作为单个元素添加到集合中,则不能,因为列表是不可哈希的。你可以添加一个元组,例如s.d add(tuple(l))。在使用内置set函数时,请参阅TypeError: unhashable type: 'list'了解更多信息。

请注意set.update()函数。文件说:

用集合本身和其他集合的并集更新集合。

我通常是这样做的:

def add_list_to_set(my_list, my_set):
    [my_set.add(each) for each in my_list]
return my_set