You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:24:08