【发布时间】:2016-11-21 19:16:22
【问题描述】:
因此,对于集合,您可以做一个对称差 (^),这相当于联合减交。为什么 ^ 是 Counter 对象不受支持的操作数,而联合和交集仍然有效?
【问题讨论】:
-
没有明确的答案。对此类问题的“通常”回答是,在设计模块时,没有人足够关心这个特殊情况来完成它的实施工作——后来也没有人足够关心它;-)
标签: python python-2.7 counter
因此,对于集合,您可以做一个对称差 (^),这相当于联合减交。为什么 ^ 是 Counter 对象不受支持的操作数,而联合和交集仍然有效?
【问题讨论】:
标签: python python-2.7 counter
扩展我的评论,结果发现它当时被讨论过,被拒绝了。
单击完整消息(及其主题)的链接;我将仅引用 Raymond Hettinger 回复的“高阶位”:
我不太可能将这个 [对称差异] 方法添加到 Counter API,因为 用例的稀有性并不能保证增加的 API 复杂性。 IMO,添加这样的方法会使课程更难学习, 理解并记住。这似乎不是一场胜利 使用现有的替代方案:
...
我希望看到有人在 ASPN Cookbook 上发布一个子类 添加了许多有趣但不常见的操作。
...
Counter() 类抱负不高。这是一本字典 用零填充缺失值,并增加一些 管理计数的基本方法。
这里有完整的消息:
https://mail.python.org/pipermail/python-list/2010-August/585040.html
ASPN Cookbook 中还有一个在 Counter 子类中实现 __xor__ 的方法:
http://code.activestate.com/recipes/577362-extension-to-python-3-counter-class/
【讨论】:
对于 Counter 对象,& 和 | 并不像对集合那样表示交集和并集......它们的意思是 max 和 min。
提供了多种数学运算,用于组合 Counter 对象以生成多重集(计数大于零的计数器)。加法和减法通过增加或减少相应元素的计数来组合计数器。交集和并集返回相应计数的最小值和最大值。每个操作都可以接受带符号计数的输入,但输出将排除计数为零或更少的结果。
有了这些定义,^ 运算符是什么意思?
如果你想要密钥的对称差异,你可以做c1.viewkeys() ^ c2.viewkeys() 1
1在 python3.x 上,使用 .keys() 代替
【讨论】: