python—如何对有序元组列表中的值求和,但只能求某个元组的值?

1rhkuytd  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(423)

我有一个元组列表,如下所示:

lst = [(1, 2, 3), (2, 4, 5), (3, 6, 7), (4, 8, 9)]

列表由每个元组的第一个元素按升序预先排序生成,元组始终由3个元素组成。
我想返回每个元组中第一个元素之后的每个元素的总和的列表,最大值不包括第一个元素的最大值,比如在本例中;4.
第二个元素的和应为2+4+6=12,第三个元素的和应为3+5+7=15。
在现实生活中值得一提 lst 可以包含数千个元组,而元组包含数百个元素,需要计算各个元素的和。
我可以做到:

sum_lst = [sum(t[e] for t in lst if t[0] < 4) for e in range(1, len(lst[0]))]

但这必须检查列表中的所有元组,因为已知求和应该在列表中的何处停止,所以这是无效的。
要在4点停车,我可以:

def calc_sum_lst(lst, e):
    sum_lst = 0
    for t in lst:
        if t[0] == 4:
            return sum_lst
        else:
            sum_lst += t[e]

sum_lst = [calc_sum_lst(lst, e) for e in range(1, len(lst[0]))]

然而,我想知道是否有一种解决方案比使用 for 循环?
值得一提的是,我发现了这篇类似的帖子,但答案都很有用 for 循环。

mf98qq94

mf98qq941#

一旦达到最大值,就可以中断,以停止对其余部分的迭代。您还可以使用0预先填充列表,然后添加到索引的正确索引中。您可以像我在下面所做的那样,将索引调整为-1,或者随后删除列表的0索引项。

lst = [(1, 2, 3), (2, 4, 5), (3, 6, 7), (4, 8, 9)]

stop_at_num = 4
sum_lst = [0] * (len(lst[0]) - 1)

for i in range(len(lst)):
    if lst[i][0] >= stop_at_num:
        break
    for e in range(1, len(lst[0])):
        sum_lst[e-1] += lst[i][e]

求和

[12, 15]

相关问题