beo*_*ver 2 python tuples pattern-matching
什么是减少这一系列元组的最佳方法
('x', 0.29, 'a')
('x', 0.04, 'a')
('x', 0.03, 'b')
('x', 0.02, 'b')
('x', 0.01, 'b')
('x', 0.20, 'c')
('x', 0.20, 'c')
('x', 0.10, 'c')
Run Code Online (Sandbox Code Playgroud)
成:
('x', 0.29 * 0.04 , 'a')
('x', 0.03 * 0.02 * 0.01, 'b')
('x', 0.20 * 0.20 * 0.10, 'c')
Run Code Online (Sandbox Code Playgroud)
编辑:
X是一个常数,它是事先知道的,可以安全地忽略
并且可以将数据视为在上面显示的第三个元素上进行预排序.
我现在正在尝试使用operator.mul,以及大量的模式匹配和奇怪的lambda函数...但我确信必须有一个更简单的方法!
我可以说谢谢你的所有答案.他们每个人都很棒,而且超出了我的期望.我所能做的就是给他们所有人一个支持,并说声谢谢!
这是一种函数式编程方法:
from itertools import imap, groupby
from operator import itemgetter, mul
def combine(a):
for (first, last), it in groupby(a, itemgetter(0, 2)):
yield first, reduce(mul, imap(itemgetter(1), it), 1.0), last
Run Code Online (Sandbox Code Playgroud)