跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

列表推导式里同时写 if 和 else 的正确语法写法

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

相关文章