Python带if条件的列表推导式为何运行结果与预期不符?
Python列表推导式运行结果和预期不符的原因
问题出在你写的列表推导式带了条件过滤逻辑,并不会对原列表所有元素执行加3操作。
带if的列表推导式执行规则
Python中这类列表推导式的语法是[运算表达式 for 迭代变量 in 可迭代对象 if 筛选条件],执行顺序是固定的:
- 第一步:逐个遍历可迭代对象中的元素,赋值给迭代变量
- 第二步:用原始元素判断是否满足if后的筛选条件,不满足的元素直接丢弃,不会进入后续运算
- 第三步:只有通过筛选的元素,才会执行最前面的运算表达式,结果存入最终生成的新列表
你的代码实际运行过程
对应你给出的代码:
numbers = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] result = [num + 3 for num in numbers if num % 2 == 0] print(result)
这里的筛选条件num % 2 == 0是判断遍历到的原始元素是不是偶数,逐一枚举原列表元素校验:
- 1、1、3、5、13、21、55都是奇数,不满足条件,直接被过滤,不会执行加3操作
- 2、8、34是偶数,满足筛选条件,分别加3后得到5、11、37
所以最终输出[5, 11, 37]是完全符合语法逻辑的结果。
预期偏差的修正方式
你想要的是所有元素加3的结果,说明你多写了不需要的if筛选子句。去掉筛选部分就能达到预期,正确写法:
result = [num + 3 for num in numbers]
这行代码运行后会返回长度为10的全量加3结果[4, 4, 5, 6, 8, 11, 16, 24, 37, 58]——你之前写的预期结果本身也有错误,原列表共10个元素,全量运算后不可能只有7个值。
内容的提问来源于stack exchange,提问作者LidorTubul
相关产品推荐
相关产品推荐

