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)
问题分析
- 遗漏最后一个元素:原循环只遍历到
len(b)-1,最后一组元素a[-1]和c[-1]从未被添加到结果中。 - 运算符错误:代码中用了
&位运算符做逻辑判断,正确的逻辑与运算符应该是and。 - 逻辑偏离需求:原代码同时检查
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
相关产品推荐
相关产品推荐

