我知道下面的代码是有效的:
list = [1 , 2 if 1==1 else 0, 3]
但是如果 if 表达式(在本例中为 1==1)返回 false,我该如何省略列表插入呢?
我的意思是,如果表达式无效,我不想插入任何值(包括“无”、“[]”)。
我试过这样的东西
list = [1 , 2 if 1==1, 3]
但它不起作用。
请您参考如下方法:
您不能使用该用法,因为您正在定义一个包含三个值的文字列表。通过在括号之间放置两个逗号和三个表达式,您已 promise 在列表中提供三个元素。如果不对某物求值,就无法让表达式“消失”。
在实际列表理解中,您可以通过将 if 放在 for 子句而不是目标表达式中来实现:
>>> x = [1, 2, 3, 4]
>>> [a if a != 3 else 'three' for a in x]
[1, 2, 'three', 4]
>>> [a for a in x if a != 3]
[1, 2, 4]
第一个理解使用条件表达式a if a != 3 else 'three',它必须同时包含if和else部分因为表达式必须计算出某个值。第二个理解使用 if a !=3 因为这是列表理解语法的一部分;它不是条件表达式的一部分,在这种情况下不能包含 else。它的工作是简单地限制将 x 中的哪些值分配给 a,而不是计算值本身。
