我有这段代码(下面),我想把它转换成“列表理解”的方式:
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
在这种情况下,我如何使用列表理解?
发布于 2016-03-24 19:42:04
你不能用列表理解来解释这个问题。在理解结束之前,列表不会绑定到名称,因此表达式无法构建每个值(在第一个值之后)来引用它。
如果需要将列表创建为表达式,请将当前循环放入可以调用的函数中。然后,您可能会考虑将其转换为生成器,而不是返回列表,但这是一个单独的设计选择。
最后一点:您的代码碰巧产生了2的能力,尽管这不是您计算它们的方法。如果这确实是您所需要的,您可以使用列表理解来创建相同的输出:
order = [2**i for i in range(4)]
但是,您必须指定结果的数量(例如,在我的理解中是4
),而不是值的上限(例如,原始循环中的10
)。
https://stackoverflow.com/questions/36208623
复制相似问题