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

Python3列表推导式代码输出异常求排查:结果不符预期

问题解决:过滤元素和不等于n的三元组

问题概述

我用Python列表推导式编写代码时遇到两个问题:一是运行时出现不应存在的[1,1,0]列表;二是输入为1、1、1、2时,输出缺失元素,和预期结果不符。调整循环范围、修改判断符号(==改!=)、替换remove为append后仍有其他错误。需求是:输入四个整数x、y、z、n(每行一个),输出所有元素和不等于n的三元组,结果按字典序升序排列。

原代码

if __name__ == '__main__':
a = int(input())
b = int(input())
c = int(input())
n = int(input())
list1=[[x,y,z] for x in range(a+1) for y in range(b+1) for z in range(c+1)]
for i in list1:
    if sum(i)== n:
        list1.remove(i)
print(list1)

测试样本

输入:

1
1
1
2

实际输出:[[0, 0, 0], [0, 1, 0], [1, 0, 0]]
预期输出:[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]

问题根源

遍历列表时直接调用remove()修改原列表会打乱迭代器的遍历顺序:当移除一个元素后,列表长度缩短,后续元素的索引会前移,导致迭代器跳过部分元素,最终要么漏删符合条件的项,要么误保留不该有的项。

修正方案

直接在列表推导式中完成过滤,避免后续修改原列表。这种方式不仅简洁,而且因为range()是升序遍历,生成的三元组天然符合字典序要求,无需额外排序。

修正后的代码:

if __name__ == '__main__':
    a = int(input())
    b = int(input())
    c = int(input())
    n = int(input())
    result = [[x, y, z] for x in range(a+1) 
                          for y in range(b+1) 
                          for z in range(c+1) 
                          if sum([x, y, z]) != n]
    print(result)

说明

  • 列表推导式中直接加入if sum([x,y,z]) != n的条件,只保留符合要求的三元组,一步到位。
  • x、y、z按从小到大的顺序遍历,生成的列表天然满足字典序升序的要求,无需额外调用sort()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:27:16