为什么集合没有对称差异。计数器?

时间:2016-07-19 03:48:55

标签: python python-2.7 counter

因此对于集合,你可以做对称差异(^),这相当于联合减去交集。当联合和交集仍然有效时,为什么^对象对象的操作数不受支持?

2 个答案:

答案 0 :(得分:2)

对于Counter对象,&|并不意味着交集和联合,就像它们对集合一样......它们意味着maxmin

  

提供了几个数学运算来组合Counter对象以生成多个集合(计数大于零的计数器)。加法和减法通过添加或减去相应元素的计数来组合计数器。交点和并集返回相应计数的最小值和最大值。每个操作都可以接受带有符号计数的输入,但输出将排除计数为零或更少的结果。

根据这些定义,^运算符意味着什么?

如果您想要键的对称差异,您可以c1.viewkeys() ^ c2.viewkeys() 1

python3.x上的

1 ,改为使用.keys()

答案 1 :(得分:2)

扩展我的评论,事实证明它已被讨论,并被拒绝。

单击完整消息的链接(及其主题);我只引用"高阶位" Raymond Hettinger的回复:

  

我不太可能将此[对称差异]方法添加到Counter API中,因为   用例的罕见性并不能保证增加的API复杂性。   IMO,添加这样的方法使得课程更难学,   理解并记住。它似乎并不像是一场胜利   使用现有的替代方案:

     

...

     

我希望看到有人将一个子类发布到ASPN Cookbook中   增加了许多有趣但不常见的操作。

     

...

     

Counter()类的抱负很低。这是一本字典   用零填充缺失值,并由少数增加   管理计数的基本方法。

这里有完整的信息:

https://mail.python.org/pipermail/python-list/2010-August/585040.html

还有ASPN Cookbook中的一个配方,在__xor__子类中实现Counter

http://code.activestate.com/recipes/577362-extension-to-python-3-counter-class/