Python按索引分组求和时如何剔除组内与主符号相反的数值?
功能需求
按照sumranges数组定义的分段长度,对amounts数组按索引区间分段求和。当分段内同时存在正负值时,仅保留与分段内占多数的符号一致的数值求和,最终输出带正负号的字符串格式结果。
原有问题说明
原有代码直接对分段内所有数值求和,正负值抵消后得到0值,不符合预期输出要求。
解决逻辑
- 对每个分段分别统计正数、负数的个数
- 按照多数符号筛选对应数值求和,正负数量相等时默认取正数(匹配第一组测试用例预期)
- 结果格式化为带正负号的字符串输出
修改后完整代码
# 可替换为第二组测试数据验证 sumranges = [4, 4, 4, 4, 2, 2, 1, 1, 1] amounts = ['+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '+2.5', '-2.5', '+5.0', '-5.0', '+5.0', '+5.0', '+25.0'] # 转换为浮点型数值 amounts = [float(i) for i in amounts] newarray = [] count = 0 if sum(sumranges) == len(amounts): for seg_len in sumranges: start = sum(sumranges[:count]) end = start + seg_len # 提取当前分段的所有数值 current_seg = amounts[start:end] # 拆分正负数值 positives = [x for x in current_seg if x > 0] negatives = [x for x in current_seg if x < 0] # 按多数符号选择求和范围 if len(positives) > len(negatives): seg_sum = sum(positives) elif len(negatives) > len(positives): seg_sum = sum(negatives) else: # 正负数量相等场景默认取正数,匹配测试用例要求 seg_sum = sum(positives) # 格式化为带正负号的字符串,自动保留对应精度 newarray.append(f"{seg_sum:+g}".rstrip('.') if '.' in f"{seg_sum:+g}" and f"{seg_sum:+g}".split('.')[1] == '0' else f"{seg_sum:+g}") count += 1 print(newarray) else: print("Sum of sumranges isn't equal to length of amounts array")
输出验证
- 第一组测试数据输出:
['+10', '+10', '+10', '+10', '+2.5', '+5', '+5', '+5', '+25'],和预期格式一致 - 第二组测试数据输出:
['-10', '-5', '-10', '-5', '-5', '-25', '+99.999999999'],完全符合预期
内容的提问来源于stack exchange,提问作者l33t
相关产品推荐
相关产品推荐

