假设我们有一个清单,我想一个一个地说清楚。 看看这个代码:
#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太大时我能做些什么来获得更好的性能?你知道吗
当你说
for i in x
时,你使用的是一个迭代器。你知道吗循环运行时,此迭代器将当前位置存储在
x
。如果在循环仍在运行时修改要迭代的对象(x
)的状态,迭代器对象将不知道这一点。你知道吗这就是为什么使用
for i in x
运行的次数不正确:删除元素时,列表的大小会缩小,导致迭代器超出(现在已缩小)列表的末尾,导致循环终止,即使列表还不是空的。while
循环没有使用迭代器:它只是一个条件检查。你知道吗通过迭代
x
的副本,您可以看到这一点:或者通过迭代
x
中的索引:要回答第二个问题,如果
x
很大,请使用生成器函数而不是实际列表。对生成器的结果进行迭代看起来仍然像for i in x
,但是列表不需要完全物化就可以进行迭代。你知道吗相关问题 更多 >
编程相关推荐