列出 Python "freezing" Jupyter notebook 中的推导式



当我在Jupyter笔记本中运行下面的代码时,我的"内核";冻结(我得到一个星号在方括号之间,像这样:[*]):

x = [1,2,3,4]
for num in x:
x.append(num**2)

为什么这段代码不"追加"呢?以x结尾的数为幂?

下面的代码可以工作,我知道为什么,但是为什么上面的代码不能工作:

x = [1,2,3,4]
out = []
for num in x:
out.append(num**2)
print(out)

你在一个列表上迭代,在每次迭代中你向列表添加一个新元素,所以迭代永远不会结束。

要查看发生了什么,将代码更改为:

import time
x = [1,2,3,4]
for num in x:
x.append(num**2)
time.sleep(0.5)
print(x)

如果你知道你在做什么,你可以避免这种"动态迭代"。使用[:]技巧:

x = [1,2,3,4]
for num in x[:]:
x.append(num**2)

通过这种方式,您将迭代x[:],而不是不断增长的x,实际上就像您正在迭代x的快照。

更简单地说,您可以像下面这样使用列表推导式:

x = [1,2,3,4]
x_squared = [elem**2 for elem in x]
x.extend(x_squared)

最新更新