加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python set union操作与命名元组的表现不佳

发布时间:2020-12-20 12:02:54 所属栏目:Python 来源:网络整理
导读:我想在 python中创建一组namedtuple,能够使用union操作动态添加元素. 以下代码片段创建了一组namedtuple,其行为很好. from collections import namedtupleB = namedtuple('B','name x')b1 = B('b1',90)b2 = B('b2',92)s = set([b1,b2])print(s) 打印 {B(name
我想在 python中创建一组namedtuple,能够使用union操作动态添加元素.

以下代码片段创建了一组namedtuple,其行为很好.

from collections import namedtuple

B = namedtuple('B','name x')

b1 = B('b1',90)
b2 = B('b2',92)
s = set([b1,b2])
print(s)

打印

{B(name='b1',x=90),B(name='b2',x=92)}

现在,如果我创建另一个namedtuple并使用union操作将其添加到我的set中,它就不会按预期运行.

b3 = B('b3',93)
s = s.union(b3)
print(s)

代码段打印以下输出.

{93,B(name='b1',x=92),'b3'}

预期产量应为:

{B(name='b1',B(name='b3',x=93)}

我误解了API吗?
python2和3都显示相同的行为.

解决方法

union期望一个set(或一个列表或另一个iterable),但你传递一个名为tuple,它本身是一个可迭代的,但是它提供了值,所以你将这个值与值合并.试试这个:

s = s.union({b3})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读