省略列表理解中的元素

Kon*_*tin 0 python list-comprehension

有以下简单的脚本:

def MyFunction(digit):
    if digit < 4:
        return digit
    else:
        return None

A = [1, 2, 3, 4, 5]
B = [MyFunction(x) for x in A]
print(B) # [1, 2, 3, None, None]
Run Code Online (Sandbox Code Playgroud)

题:

是否有可能以MyFunction()某种方式重写,所以B变得等于[1, 2, 3]没有None?请不要建议我if在列表理解中使用表达式,在列表理解之后处理B等.

Kev*_*vin 5

是否有可能以某种方式重写MyFunction(),所以B变为等于[1,2,3]而没有None?请不要建议我使用列表理解中的表达式,列表理解后的进程B等

不,不是.列表推导不会改变列表的长度.你无法MyFunction()改变这一点.您必须if在列表推导中使用a 或在列表上进行某种预处理或后处理.

Python语言参考中所述:

理解包括单个表达式,后跟至少一个for子句和零个或多个for或if子句.在这种情况下,新容器的元素是通过将每个for或if子句从左到右嵌套,并且每次到达最内部块时评估表达式以产生元素而生成的元素.

每次for迭代都会得到一个元素.这是内置于语言中的.

  • *你无法在MyFunction()中做任何改变*:不完全正确,请参阅下面的黑客攻击.如果你曾说过"你不应该做任何改变的事情"我会同意的. (2认同)