将第一个数组列表的第二个值 (24) 与第二个数组列表的第一个值 (118) 相加,依此类推

时间:2021-07-23 07:27:29

标签: python

在计算了几个值并获得了这些值之后,我还需要计算更多,但我不知道该怎么做。

[array([59, 24,  9,  3,  1,  0,  0,  0,  0,  0,  0,  0], dtype=int64),
 array([118,  48,  19,   7,   3,   1,   0,   0,   0,   0,   0,   0],
       dtype=int64),
 array([178,  72,  29,  11,   4,   1,   0,   0,   0,   0,   0,   0],
       dtype=int64),
 array([237,  96,  39,  15,   6,   2,   1,   0,   0,   0,   0,   0],
       dtype=int64),
 array([296, 120,  49,  19,   8,   3,   1,   0,   0,   0,   0,   0],
       dtype=int64),
 array([356, 144,  58,  23,   9,   3,   1,   0,   0,   0,   0,   0],
       dtype=int64),
 array([415, 168,  68,  27,  11,   4,   1,   0,   0,   0,   0,   0],
       dtype=int64),
 array([474, 193,  78,  31,  12,   5,   2,   0,   0,   0,   0,   0],
       dtype=int64),
 array([534, 217,  88,  35,  14,   5,   2,   0,   0,   0,   0,   0],
       dtype=int64),
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64),
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64),
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64)]

现在我需要应用计算并获得输出

59
142(got it by 24+118)
235(got it by 9+48+178)
331(got it by 3+19+72+237)
429(got it by 1+7+29+96+296)
...
..
.

我期待上述值作为我的输出。

3 个答案:

答案 0 :(得分:2)

已经提供了使用列表理解的解决方案,并且肯定会产生预期的结果。但是,根据我的时间安排,它的效率不是很高。所以,为了简单起见,我想出了这个:

for i in range(len(a)):
        x = a[0][i]
        r = 1
        for c in range(i - 1, -1, -1):
            x += a[r][c]
            r += 1
        print(f'x={x}')

答案 1 :(得分:1)

试试这个:

def find_weird_sum(mtr):

   for i in range(len(mtr)):
       
       intermediate_sum = 0
       
       for j in range(i+1):
           intermediate_sum += mtr[j][i - j]
       
       print(intermediate_sum)

find_weird_sum(x)

答案 2 :(得分:0)

  • 效率低下但易于编写代码的解决方案。
  • 如果您需要在大型矩阵中进行操作,我可以提供更高效的方法。

代码:

from pandas import array
x = [array([59, 24,  9,  3,  1,  0,  0,  0,  0,  0,  0,  0], dtype="int64"),
 array([118,  48,  19,   7,   3,   1,   0,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([178,  72,  29,  11,   4,   1,   0,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([237,  96,  39,  15,   6,   2,   1,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([296, 120,  49,  19,   8,   3,   1,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([356, 144,  58,  23,   9,   3,   1,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([415, 168,  68,  27,  11,   4,   1,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([474, 193,  78,  31,  12,   5,   2,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([534, 217,  88,  35,  14,   5,   2,   0,   0,   0,   0,   0],
       dtype="int64"),
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype="int64"),
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype="int64"),
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype="int64")]
for i in range(len(x[0])):
    result = 0
    for line,_ in enumerate(x):
        for row,value in enumerate(x[line]):
            if line+row == i:
                result+= value
    print(result)

结果:

59
142
235
331
429
529
628
726
828
335
134
52
  • 更有效的方法:

代码:

for i in range(len(x[0])):
    print(sum([x[j][i-j] for j in range(i+1)]))

结果:

59
142
235
331
429
529
628
726
828
335
134
52
相关问题