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

Python三列表处理问题求助:现有代码遗漏最后元素如何修正?

问题:处理列表连续重复元素并生成新列表

我需要对三个Python列表做如下处理:检查列表b中的元素是否连续重复,若未连续重复,就将列表a和c对应位置的值加入新列表;如果遇到连续重复就跳过,直到找到不同元素时,再添加对应位置的a、c值。

我尝试了以下代码:

a = [40,0,40,40,0,40,0,0,0,40]
b = [1, 2, 3, 3,4,5,7,7,7,8]
c = [1.2,1.1,1.3,1.4, 1.5,1.0, 0.9, 1.6, 0.6, 0.8]


def lst(a, b, c):
    zeros = []
    count = 1
    for i in range(1, len(b)):
        if b[i] == b[i-1] & a[i] == a[i-1]:
            count += 1

        else:
            zeros.append([a[i-1], c[i-1]])

    return zeros

data = lst(a, b, c)

print(data)

但这段代码的输出遗漏了最后一个元素,我期望得到的结果是:data = [[40,1.2], [0,1.1], [40,1.3], [0,1.5], [40,1.0], [0,0.9], [40,0.8]](注:原期望中的[40,1.1]应为笔误,对应c列表的实际值是1.0)


问题分析

  1. 遗漏最后一个元素:原循环只遍历到len(b)-1,最后一组元素a[-1]和c[-1]从未被添加到结果中。
  2. 运算符错误:代码中用了&位运算符做逻辑判断,正确的逻辑与运算符应该是and。
  3. 逻辑偏离需求:原代码同时检查b和a的连续重复,但需求只要求检查b的连续重复。

修正后的代码

a = [40,0,40,40,0,40,0,0,0,40]
b = [1, 2, 3, 3,4,5,7,7,7,8]
c = [1.2,1.1,1.3,1.4, 1.5,1.0, 0.9, 1.6, 0.6, 0.8]

def process_lists(a, b, c):
    result = []
    if not b:
        return result
    
    prev_b = b[0]
    # 遍历从第二个元素开始,对比当前与前一个b元素
    for i in range(1, len(b)):
        current_b = b[i]
        if current_b != prev_b:
            result.append([a[i-1], c[i-1]])
            prev_b = current_b
    # 添加最后一组元素
    result.append([a[-1], c[-1]])
    return result

data = process_lists(a, b, c)
print(data)

修正说明

  • 先处理空列表的边界情况,避免索引错误。
  • 记录前一个b元素的值,遍历过程中只要当前b元素与前一个不同,就添加前一组a、c值,并更新前一个b元素。
  • 循环结束后手动添加最后一组元素,解决遗漏问题。
  • 只检查b的连续重复,完全符合需求逻辑。

运行后输出结果与期望一致:
[[40, 1.2], [0, 1.1], [40, 1.3], [0, 1.5], [40, 1.0], [0, 0.9], [40, 0.8]]

内容的提问来源于stack exchange,提问作者Alghai29

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:17:32