Python中无需Numpy实现多元组按列求和的方法
Python中无需Numpy实现多元组按列求和的方法
嗨,这个问题我之前也碰到过,不用numpy其实有好几种实用的办法,我给你梳理几个常用的:
使用
zip+sum组合(个人最推荐)
这个方法简洁又直观,利用zip(*迭代器)把所有元组的对应位置元素“打包”到一起,再用sum分别计算每一组的和:n = 5 # 替换成你需要的正整数 # 生成(i, i²)的迭代器 num_tuples = ((i, i**2) for i in range(1, n+1)) # 转置后对每列求和 sum_nums, sum_squares = map(sum, zip(*num_tuples)) print(sum_nums) # 输出15,对应1+2+3+4+5的和 print(sum_squares) # 输出55,对应1²+2²+3²+4²+5²的和使用
reduce累加元组
从functools导入reduce后,我们可以用它来逐步累加每个元组的对应值:from functools import reduce n = 5 result = reduce( lambda acc, curr: (acc[0] + curr[0], acc[1] + curr[1]), ((i, i**2) for i in range(1, n+1)), (0, 0) # 初始累加值 ) sum_nums, sum_squares = result这里的lambda函数负责把当前元组的两个值分别加到累加器的对应位置,初始值
(0,0)是求和的起点。直接循环累加(新手友好)
如果不想用高阶函数,直接初始化两个变量循环累加就好,可读性拉满:n = 5 sum_nums = 0 sum_squares = 0 for i in range(1, n+1): sum_nums += i sum_squares += i**2进阶:用数学公式直接计算(最优效率)
其实前n个自然数的和与平方和都有现成的数学公式,不需要循环,时间复杂度是O(1),适合n很大的场景:n = 5 sum_nums = n * (n + 1) // 2 sum_squares = n * (n + 1) * (2 * n + 1) // 6
备注:内容来源于stack exchange,提问作者jonnybolton16
相关产品推荐
相关产品推荐

