我有一个元组列表,如下所示:
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
循环。
1条答案
按热度按时间mf98qq941#
一旦达到最大值,就可以中断,以停止对其余部分的迭代。您还可以使用0预先填充列表,然后添加到索引的正确索引中。您可以像我在下面所做的那样,将索引调整为-1,或者随后删除列表的0索引项。
求和