如何将值列表添加到现有集?
当前回答
您不能将列表添加到集合中,因为列表是可变的,这意味着您可以在将列表添加到集合后更改列表的内容。
然而,你可以向集合中添加元组,因为你不能改变元组的内容:
>>> 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参考中所述,您可以覆盖此行为。
其他回答
您将希望使用可哈希的元组(不能像列表那样对可变对象进行哈希)。
>>> 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'了解更多信息。
尝试使用* 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()函数。文件说:
用集合本身和其他集合的并集更新集合。
推荐文章
- 在Python中哪个更快:x**。5还是math.sqrt(x)?
- 有哪些好的Python ORM解决方案?
- 如何在f字符串中转义括号?
- Python void返回类型注释
- 如何为python模块的argparse部分编写测试?
- 在python中是否有用于均方根误差(RMSE)的库函数?
- 如何从matplotlib (pyplot。Figure vs matplotlib。figure) (frameon=False matplotlib中有问题)
- django test app error -在创建测试数据库时出现错误:创建数据库的权限被拒绝
- 识别使用pip安装的python包的依赖关系
- 从字符串变量导入模块
- 如何删除Python中的前导空白?
- python中的assertEquals和assertEqual
- 如何保持Python打印不添加换行符或空格?
- 为什么Python的无穷散列中有π的数字?
- Python 3.7数据类中的类继承