如何遍历列表,合并连续同符号元素直至符号变化?
合并列表中连续同符号元素的求和方案
针对你需要合并列表中连续同符号元素并求和的需求,以下是能处理任意数量连续同符号元素的解决方案,替代你原来仅能两两处理的代码:
实现代码
arr = [1, 2, 1, -1, 2, -1, 2, -2, -2, 3, 1] data = [] if not arr: print(data) exit() # 初始化当前累加值与对应符号 current_sum = arr[0] current_sign = 1 if arr[0] > 0 else -1 for num in arr[1:]: num_sign = 1 if num > 0 else -1 if num_sign == current_sign: # 符号相同,继续累加 current_sum += num else: # 符号不同,存入当前累加结果并重置状态 data.append(current_sum) current_sum = num current_sign = num_sign # 加入最后一组连续元素的求和结果 data.append(current_sum) print(data) # 输出: [4, -1, 2, -1, 2, -4, 4]
逻辑说明
- 初始化:从列表第一个元素开始,记录当前的累加值和对应的符号(正为1,负为-1)
- 遍历后续元素:
- 若当前元素与累加组符号相同,直接累加到
current_sum中 - 若符号不同,先把之前的累加结果存入
data,再将当前元素设为新的累加起点,更新符号
- 若当前元素与累加组符号相同,直接累加到
- 收尾处理:遍历结束后,把最后一组连续元素的求和结果加入
data(因为最后一组没有后续元素触发存入操作)
对比原代码的优势
原代码通过步长为2的循环两两处理元素,仅能合并最多两个连续同符号的元素,无法处理三个及以上的连续情况(比如示例中前3个正数)。而上述方案可以处理任意数量的连续同符号元素,同时严格保持原列表的元素顺序。
内容的提问来源于stack exchange,提问作者Swordfish II
相关产品推荐
相关产品推荐

