如何将值列表添加到现有集?
当前回答
若要将列表中的元素添加到集合中,请使用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'了解更多信息。
其他回答
我通常是这样做的:
def add_list_to_set(my_list, my_set):
[my_set.add(each) for each in my_list]
return my_set
您不能将列表添加到集合中,因为列表是可变的,这意味着您可以在将列表添加到集合后更改列表的内容。
然而,你可以向集合中添加元组,因为你不能改变元组的内容:
>>> 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参考中所述,您可以覆盖此行为。
列表对象是不可哈希的。你可能想把它们转换成元组。
尝试使用* 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使用id而不是hash。因此,我发现mydict[id(mylist)] = mylist而不是myset.add(mylist)提供我想要的行为。
推荐文章
- “克隆”行或列向量
- 在python shell中按方向键时看到转义字符
- 在pip install中方括号是什么意思?
- 使用Matplotlib以非阻塞的方式绘图
- 使用sklearn缩放Pandas数据框架列
- 如何创建关键或附加一个元素的关键?
- virtualenv的问题-无法激活
- 是否可以使用scikit-learn K-Means聚类来指定自己的距离函数?
- 如何在Python中删除文本文件的文件内容?
- 一个干净、轻量级的Python扭曲的替代品?
- 在Python中从字符串中移除所有非数字字符
- 在Python中,如何以排序的键顺序遍历字典?
- Python中的多行f-string
- 批量归一化和退出的排序?
- Python中的“@=”符号是什么意思?