将常规转换为列表理解

时间:2016-03-24 19:34:59

标签: python-2.7 list-comprehension

我有这个代码(下面),我想将其转换为'list comprehension'方式:

order = [1]
for num2 in range(2,10):
    if num2%order[-1]  == 0:
        order.append(num2)

此代码只生成ai<ai+1 ai+1%ai==0的列表:

  

[1,2,4,8]

在这种情况下如何使用列表推导?

1 个答案:

答案 0 :(得分:1)

您无法使用列表理解。在理解结束之前,列表不会被绑定到名称,因此构建每个值(在第一个之后)的表达式无法引用它。

如果您需要能够将列表创建为表达式,请将当前循环放在可以调用的函数中。您可能会考虑将其转换为生成器,而不是返回列表,但这是一个单独的设计选择。

最后一点:您的代码恰好产生2的幂,但这并不是您计算它们的方式。如果这真的是你所需要的,那么可以使用列表理解来创建相同的输出:

order = [2**i for i in range(4)]

您必须指定结果数量(例如,在我的理解中为4),而不是值的上限(例如原始循环中的10)。