如何对列表按每4个元素分组并计算每组的和?
列表按4元素分组求和的实现
需求:将输入列表按每4个元素划分为一组,计算每组的元素总和,最终返回由各组总和组成的新列表。
示例:
输入:[2,2,2,2,3,3,3,3,4,4,4,4]
输出:[8,12,16]
方法一:切片推导式(基础实现)
直接通过循环切片获取每组元素,再计算总和,逻辑直观易懂,适合处理任意长度的列表(最后一组元素不足4个时仍会正常求和):
def calculate_group_sum(input_list, group_size=4): return [sum(input_list[i:i+group_size]) for i in range(0, len(input_list), group_size)] # 测试示例 test_list = [2,2,2,2,3,3,3,3,4,4,4,4] print(calculate_group_sum(test_list)) # 输出: [8, 12, 16]
方法二:利用itertools工具库
如果允许使用Python标准库的itertools模块,可以用zip_longest来实现分组,适合需要统一处理“不足组大小的剩余元素”的场景(可通过fillvalue参数指定补位值,默认补0):
from itertools import zip_longest def calculate_group_sum(input_list, group_size=4): # 将列表重复group_size次后按位置打包,实现分组 groups = zip_longest(*[iter(input_list)]*group_size, fillvalue=0) return [sum(group) for group in groups] # 测试示例 test_list = [2,2,2,2,3,3,3,3,4,4,4,4] print(calculate_group_sum(test_list)) # 输出: [8, 12, 16]
补充说明
- 如果输入列表长度不是4的倍数,比如
[1,2,3,4,5,6]:- 方法一会得到
[10, 11](最后一组仅2个元素,直接求和) - 方法二默认会补0,得到
[10, 11](5+6+0+0=11),若不需要补位,可改用itertools.islice或直接用方法一。
- 方法一会得到
内容的提问来源于stack exchange,提问作者ddd
相关产品推荐
相关产品推荐

