Python列表解析

时间:2018-09-27 16:56:47

标签: python python-3.x algorithm list list-comprehension

我正在学习python3列表理解。我了解如何格式化列表理解:[等式,for循环,如果要过滤的if语句],但是我无法弄清楚如何将三行代码浓缩为“等式”部分的单个等式。

我要获取一个数字并将其添加到自身中,然后获取结果并将其添加到自身中,以此类推,以在列表中创建一个数字序列。

我可以通过声明x = 1然后循环执行以下操作来完成此操作:

y = x + x

x = y

有人可以帮我把它变成单线方程式吗?如果可能的话,我将来可以学习以帮助我解决这一问题的资源吗?

1 个答案:

答案 0 :(得分:3)

您的算法等效于乘以2的幂:

x = 3
res = [x * 2**i for i in range(10)]

# [3, 6, 12, 24, 48, 96, 192, 384, 768, 1536]

要了解为什么会这样,请注意,您在for循环的每次迭代中都将起始数字乘以2:

x = 3
res = [x]
for _ in range(9):
    y = x + x
    x = y
    res.append(y)

print(res)

# [3, 6, 12, 24, 48, 96, 192, 384, 768, 1536]

正如@timgeb所提到的,您不能随便引用列表理解中的元素,因为在理解完成之前这些元素不可用。

相关问题