Kar*_*ara 6 python reduce tuples list
我有这个元组列表:
a = [(1, 2), (1, 4), (1, 6)]
Run Code Online (Sandbox Code Playgroud)
我想使用reduce函数来获得这个结果:
(3, 12)
Run Code Online (Sandbox Code Playgroud)
我试过了:
x = reduce(lambda x, y: x+y, a)
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误...我想在每个元组的第一个索引中添加所有元素,然后加上第二个元素.
the*_*eye 10
如果您希望a的输出为reduce元组,则所有中间结果也应该是元组.
a = [(1, 2), (1, 4), (1, 6)]
print reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), a)
Run Code Online (Sandbox Code Playgroud)
产量
(3, 12)
Run Code Online (Sandbox Code Playgroud)
编辑:如果您想(0, 0)在列表为空时获取
a = []
print reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), [(0, 0)] + a)
Run Code Online (Sandbox Code Playgroud)
产量
(0, 0)
Run Code Online (Sandbox Code Playgroud)
编辑2: Reduce接受默认初始值设定项作为最后一个参数,这是可选的.通过使用它,代码变为
a = []
print reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), a, (0, 0))
Run Code Online (Sandbox Code Playgroud)
>>> a = [(1, 2), (1, 4), (1, 6)]
>>> map(sum, zip(*a))
[3, 12]
Run Code Online (Sandbox Code Playgroud)
UPDATE
根据Raymond Hettinger的说法,
zip-star技巧滥用堆栈来昂贵地计算转置.
这是一个不使用列表理解的替代方案.
>>> a = [(1, 2), (1, 4), (1, 6)]
>>> [sum(item[i] for item in a) for i in range(2)] # 2 == len(a[0])
[3, 12]
>>> a = []
>>> [sum(item[i] for item in a) for i in range(2)] # 2 == len(a[0])
[0, 0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |