列表推导式中if-else必须作为三元表达式置于for左侧,如[x if x>=0 else 0 for x in numbers];仅if过滤则置于for右侧,如[x for x in numbers if x>0]。
在列表推导式中同时使用
和
,必须把整个条件表达式写在前面(即“值部分”),不能把
放在后面。这是初学者最容易出错的地方。
正确语法:三元表达式放在 for 前面
格式为:
条件判断(
)是整体作为“生成什么值”的逻辑,属于表达式,必须出现在
左侧
不能写成
—— 这是语法错误
例如:将负数转为 0,非负数保持原值
numbers = [-2, -1, 0, 1, 2]result = [x if x >= 0 else 0 for x in numbers]# 得到 [0, 0, 0, 1, 2]
对比:只有 if(无 else)时的写法
纯过滤用法,
写在
后面,不带
作用是筛选元素,不是变换值
语法:
例如:只保留正数
numbers = [-2, -1, 0, 1, 2]positives = [x for x in numbers if x > 0]# 得到 [1, 2]
常见错误与提醒
必须成对出现,且只能出现在“值生成位置”,即
左边
不能在同一个推导式里既用左侧
又在右侧加
过滤(语法不允许)
如果逻辑复杂,建议拆成普通循环或用函数封装,避免可读性下降
ifelseif[value_if_true if condition else value_if_false for item in iterable]if...elsefor[x for x in lst if x > 0 else 0]ifforelse[expr for item in iterable if condition]if-elseforif-elseif