我有这个代码(下面),我想将其转换为'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]
在这种情况下如何使用列表推导?
答案 0 :(得分:1)
您无法使用列表理解。在理解结束之前,列表不会被绑定到名称,因此构建每个值(在第一个之后)的表达式无法引用它。
如果您需要能够将列表创建为表达式,请将当前循环放在可以调用的函数中。您可能会考虑将其转换为生成器,而不是返回列表,但这是一个单独的设计选择。
最后一点:您的代码恰好产生2的幂,但这并不是您计算它们的方式。如果这真的是你所需要的,那么可以使用列表理解来创建相同的输出:
order = [2**i for i in range(4)]
您必须指定结果数量(例如,在我的理解中为4
),而不是值的上限(例如原始循环中的10
)。