如果没有其他 - Python列表

alm*_*gra 1 python list

我知道以下代码是有效的:

list = [1 , 2 if 1==1 else 0, 3]
Run Code Online (Sandbox Code Playgroud)

但如果if表达式(在这种情况下为1 == 1)返回false,我怎么能省略列表插入?

我的意思是,如果表达式无效,我不想插入任何值(包括'None','[]').

我试过这样的事

list = [1 , 2 if 1==1, 3]
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Bre*_*arn 8

您无法使用该用法,因为您正在定义具有三个值的文字列表.通过在括号中放置两个逗号和三个表达式,您已承诺在列表中提供三个元素.如果没有评估某些东西,就没有办法让表达"消失".

在实际的列表理解中,您可以通过将ifin 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]
Run Code Online (Sandbox Code Playgroud)

第一个理解使用条件表达式a if a != 3 else 'three',它必须具有两个部分ifelse部分,因为表达式必须求值为某个值.第二种理解使用,if a !=3因为这是列表理解语法的一部分; 它不是条件表达式的一部分,在这种情况下不能包含else.它的工作是简单地限制x分配哪些值a,而不是评估值本身.

  • 它非常相关,因为第一句话解释说,由于测试失败,你不能拥有一个可以"消失"的元素. (2认同)

che*_*ner 5

要选择在列表中包含项目,您必须将分配分为几个部分:

l = [1] + ([2] if 1 else []) + [3]
Run Code Online (Sandbox Code Playgroud)

(括号可能是可选的,但它们不会受到伤害;我不确定条件表达式具有什么优先级.)

这是一种简短的写作方式

if 1:
    l = [1] + [2] + [3]  # Which is just [1,2,3]
else:
    l = [1] + [] + [3]   # Which is just [1,3]
Run Code Online (Sandbox Code Playgroud)

列表文字中指定的任何元素都必须存在; 没有办法在Python中编写可能不存在的项.


如果您熟悉Perl,那么类似的东西可能的,但这只是因为Perl具有非常不同的语义.

比较作业

@list = (1, 0 ? 2 : (), 3)
Run Code Online (Sandbox Code Playgroud)

这将生成列表,(1, 3)因为它(1, (), 3)被解释为3个列表的串联(1,), (), and (3,),部分原因是您无法将列表嵌套在其他列表中.另一方面

@list = (1, 1 ? 2 : (), 3)
Run Code Online (Sandbox Code Playgroud)

生成列表(1, 2, 3).