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

Python无iterable列表推导式条件不成立时返回空列表的写法

问题

以下是问题对应的代码运行与报错场景:

>>> x = 7
>>> res = [ 'True' if x > 1 and x < 5 ]
  File "<stdin>", line 1
    res = [ 'True' if x > 1 and x < 5 ]
                                       ^
SyntaxError: invalid syntax
>>> res = [ 'True' if x > 1 and x < 5 else 'False']
>>> res
['False']

需求:通过单行语法初始化列表res,当条件x > 1 and x < 5成立时,列表内写入值'True';条件不成立时列表为空。不需要使用带for循环的常规列表推导式。

解答

首先要明确:Python 语法不支持在列表字面量内直接使用不带else的三元表达式,而带else的三元表达式无论条件是否成立,都会固定生成一个值作为列表元素,因此不可能通过替换else后的'False'实现条件不满足时列表为空的效果。

最简洁的单行实现方式是把三元判断放在列表外层:条件成立时返回包裹目标值的单元素列表,不成立时直接返回空列表,代码如下:

>>> x = 7
>>> res = ['True'] if x > 1 and x < 5 else []
>>> res
[]
>>> x = 3
>>> res = ['True'] if x > 1 and x < 5 else []
>>> res
['True']

这种写法没有冗余逻辑,可读性强,完全符合单行初始化的要求。

如果你一定要把判断逻辑写在方括号内部,可以利用可迭代对象解包的特性:条件成立时解包单元素的可迭代对象得到目标元素,条件不成立时解包空可迭代对象,不生成任何元素:

>>> res = [*('True' if x > 1 and x < 5 else ())]

这种写法效果和前者一致,但可读性稍差,更推荐第一种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:48:17