数组中第一或第二位的所有数字之和

时间:2018-10-23 12:04:20

标签: python

我有一个二维列表,例如:

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

3 个答案:

答案 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)

list1 = [[1,2],[3,4],[5,6],[7,8]]
ind = 0
sum_ind = sum(list(zip(*list1))[ind])

以上内容甚至可以写成以列表和索引为输入的函数,并返回公共索引的和。 上面我们要做的是首先使用zip将所有相同的索引获取到各个列表,然后选择必须求和的索引,然后将其传递给sum函数。