【问题标题】:list compression weird behavior [duplicate]列表理解奇怪的行为[重复]
【发布时间】:2019-10-29 00:46:39
【问题描述】:

我对列表理解有疑问。如果我想输出奇数平方并将条件放在输出部分(我知道如何将条件放在循环部分以获得所需的结果)

[num**2 if num % 2==0 for num in range(10)]

返回错误代码。为什么 Python 不喜欢它?

通过添加else,以下返回零

[num**2 if num % 2==0 else 0 for num in range(10)]

所以我尝试在此之上删除零

[num**2 if num % 2==0 else 0 for num in range(10)].remove(0)

python返回空,为什么?

【问题讨论】:

    标签: python


    【解决方案1】:
    1. [num**2 if num % 2==0 for num in range(10)] 返回错误代码。为什么 Python 不喜欢它?

    您的列表理解语法倒退了。 for 先出现,然后是 if

    [num**2 for num in range(10) if num % 2 == 0]
    

    或者,使用rangestep参数:

    [num**2 for num in range(0, 10, 2)]
    

    【讨论】:

      【解决方案2】:

      列表理解有问题。

      列表推导式由包含表达式的括号组成 后跟一个 for 子句,然后是零个或多个 for 或 if 子句。 -- Python, Data Structures Documentation, List Comprehensions

      将您的第一个更改为:

      [num**2 for num in range(10) if num % 2 == 0]
      

      输出:

      [0, 4, 16, 36, 64]
      

      【讨论】:

        猜你喜欢
        • 2013-12-28
        • 1970-01-01
        • 2013-03-26
        • 2015-10-27
        • 1970-01-01
        • 2016-01-28
        • 1970-01-01
        • 2011-11-14
        相关资源
        最近更新 更多