我正在学习python3列表理解。我了解如何格式化列表理解:[等式,for循环,如果要过滤的if语句],但是我无法弄清楚如何将三行代码浓缩为“等式”部分的单个等式。
我要获取一个数字并将其添加到自身中,然后获取结果并将其添加到自身中,以此类推,以在列表中创建一个数字序列。
我可以通过声明x = 1然后循环执行以下操作来完成此操作:
y = x + x
x = y
有人可以帮我把它变成单线方程式吗?如果可能的话,我将来可以学习以帮助我解决这一问题的资源吗?
答案 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所提到的,您不能随便引用列表理解中的元素,因为在理解完成之前这些元素不可用。