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


当前回答

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

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

其他回答

我发现我今天也需要做一些类似的事情。该算法知道何时创建一个需要添加到集合中的新列表,但不知道何时完成对列表的操作。

总之,我想让set使用id而不是hash。因此,我发现mydict[id(mylist)] = mylist而不是myset.add(mylist)提供我想要的行为。

尝试使用* 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'}

集合不能有可变的元素/成员。列表是可变的,不能是集合的成员。

因为集合是可变的,所以你不能拥有集合的集合! 不过你可以买一套冷冻套装。

(同样的“可变性要求”也适用于字典的键。)

其他答案已经给出了代码,我希望这能给你一些启发。 我希望亚历克斯·马特利能给出更多细节。

添加列表的内容

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

我通常是这样做的:

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