当我在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)