python for loop and remove方法

2024-05-15 13:39:28 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个清单,我想一个一个地说清楚。 看看这个代码:

#code1
>>> x=[9,0,8,1,7,2,5]
>>> for i in x :
      x.remove(i)
>>> x
[0, 1, 2]

最后x不清楚了。为什么? 以及

#code2:
>>> for i in x :
      x.remove(x[0])
>>> x
[7, 2, 5]

此代码类似于代码1。 按代码3比较这两个代码,为什么它们的行为不同于此代码:

#code3:
>>> while x:
    x.remove(x[0])
>>> x
[]

我还有一个关于for/while循环的问题, python运行时:

for i in x 

或者

while x

所有的x内容都在内存/RAM中吗?如果是的话,当x太大时我能做些什么来获得更好的性能?你知道吗

编辑:

plz解释代码中输出的差异: enter image description here


Tags: 内存代码in编辑内容for差异性能
1条回答
网友
1楼 · 发布于 2024-05-15 13:39:28

当你说for i in x时,你使用的是一个迭代器。你知道吗

循环运行时,此迭代器将当前位置存储在x。如果在循环仍在运行时修改要迭代的对象(x)的状态,迭代器对象将不知道这一点。你知道吗

这就是为什么使用for i in x运行的次数不正确:删除元素时,列表的大小会缩小,导致迭代器超出(现在已缩小)列表的末尾,导致循环终止,即使列表还不是空的。while循环没有使用迭代器:它只是一个条件检查。你知道吗

通过迭代x副本,您可以看到这一点:

for i in x[:]:
    x.remove(x[0])

或者通过迭代x中的索引:

for i in range(len(x)):
    x.remove(x[0])

要回答第二个问题,如果x很大,请使用生成器函数而不是实际列表。对生成器的结果进行迭代看起来仍然像for i in x,但是列表不需要完全物化就可以进行迭代。你知道吗

相关问题 更多 >