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


当前回答

您将希望使用可哈希的元组(不能像列表那样对可变对象进行哈希)。

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

其他回答

若要将列表中的元素添加到集合中,请使用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'了解更多信息。

您将希望使用可哈希的元组(不能像列表那样对可变对象进行哈希)。

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

尝试使用* 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'])
>>> 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使用id而不是hash。因此,我发现mydict[id(mylist)] = mylist而不是myset.add(mylist)提供我想要的行为。