我有一个二维列表,例如:
list1 = [[1,2],[3,4],[5,6],[7,8]]
,我想在每个元素的第n位找到所有数字的和。
例如,如果我想要答案为0,则可以计算:
my_sum = list1[0][0] + list1[1][0] + list1[2][0]
或
my_sum = 0
place = 0
for i in range(len(list1)):
my_sum += list1[i][place]
return my_sum
输出:16
是否有更优雅的方法来做到这一点?还是只使用一行代码的代码?
我的意思是虚构的代码,例如:
fictional_function(list1,place) = 16
答案 0 :(得分:0)
一般而言,如果您想要多个索引(例如0和1),则可以将reduce与结合并按元素求和,如下所示:
from functools import reduce
def fictional_function(lst, *places):
s_places = set(places)
def s(xs, ys):
return [x + y for x, y in zip(xs, ys)]
return [x for i, x in enumerate(reduce(s, lst)) if i in s_places]
list1 = [[1, 2], [3, 4], [5, 6], [7, 8]]
print(fictional_function(list1, 0))
print(fictional_function(list1, 0, 1))
print(fictional_function(list1, *[1, 0]))
输出
[16]
[16, 20]
[16, 20]
这个想法是函数s
将两个列表元素进行求和,例如:
s([1, 2], [3, 4]) # [4, 6]
并通过减少s
应用于列表列表,最后仅针对预期的索引(位置)过滤结果。
答案 1 :(得分:0)
由于您正在寻找功能解决方案,请考虑使用operator.itemgetter
:
from operator import itemgetter
L = [[1,2],[3,4],[5,6],[7,8]]
res = sum(map(itemgetter(0), L)) # 16
为了提高性能和简化语法,您可以使用第三方库,例如NumPy:
import numpy as np
A = np.array([[1,2],[3,4],[5,6],[7,8]])
res = A[:, 0].sum() # 16
答案 2 :(得分:0)