在python的set *** 作中添加vs更新

在python的set *** 作中添加vs更新,第1张

在python的set *** 作中添加vs更新

set.add

set.add
集合中添加单个元素。所以,

>>> a = set()>>> a.add(1)>>> aset([1])

可以,但是除非可哈希,否则它不能与可迭代对象一起使用。这就是

a.add([1, 2])
失败的原因。

>>> a.add([1, 2])Traceback (most recent call last):  File "<input>", line 1, in <module>TypeError: unhashable type: 'list'

在这里,

[1,2]
将其视为要添加到集合中的元素,并且如错误消息所言,列表不能被散列,但是集合中的所有元素都应该是可散列的。引用文档,

返回一个新的

set
frozenset
对象,其元素来自可迭代。集合的元素必须是可哈希的。

set.update

在的情况下

set.update
,您可以向其传递多个可迭代对象,它将迭代所有可迭代对象,并将集合中的各个元素包括在内。
切记: 它只能接受可迭代。这就是为什么当您尝试更新时出现错误的原因
1

>>> a.update(1)Traceback (most recent call last):  File "<input>", line 1, in <module>TypeError: 'int' object is not iterable

但是,下面的方法将起作用,因为该列表

[1]
被迭代并且该列表的元素已添加到集合中。

>>> a.update([1])>>> aset([1])

set.update
基本上等同于就地设置联合 *** 作。考虑以下情况

>>> set([1, 2]) | set([3, 4]) | set([1, 3])set([1, 2, 3, 4])>>> set([1, 2]) | set(range(3, 5)) | set(i for i in range(1, 5) if i % 2 == 1)set([1, 2, 3, 4])

在这里,我们将所有可迭代对象显式转换为集合,然后找到并集。有多个中间集和联合。在这种情况下,

set.update
可以充当良好的助手功能。由于它接受任何迭代,因此您只需

>>> a.update([1, 2], range(3, 5), (i for i in range(1, 5) if i % 2 == 1))>>> aset([1, 2, 3, 4])


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5647230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存