在Python3中将列表中的项作为for循环删除-奇怪的行为
返回在Python3中将列表中的项作为for循环删除-奇怪的行为,python,python-3.x,for-loop,Python,Python 3.x,For Loop,返回 lst = [1,2,3,4,5] def rem_items(lst): for i in lst: print(lst) time.sleep(1) lst.remove(i) rem_items(lst) 我能理解前两行,但为什么它会删除3而不是2? 为什么它在移除3而不是2,4,5后停止 提前感谢您在迭代列表时正在修改列表。这通常是一件坏事,可能会导致不可预测的结果 有关更多信息,请参见此处: 您在迭代列表时正在修改列表
lst = [1,2,3,4,5]
def rem_items(lst):
for i in lst:
print(lst)
time.sleep(1)
lst.remove(i)
rem_items(lst)
我能理解前两行,但为什么它会删除3而不是2?为什么它在移除3而不是2,4,5后停止
提前感谢您在迭代列表时正在修改列表。这通常是一件坏事,可能会导致不可预测的结果 有关更多信息,请参见此处:
您在迭代列表时正在修改列表。这通常是一件坏事,可能会导致不可预测的结果 有关更多信息,请参见此处:
您正在迭代列表[1,2,3,4,5]并修改其长度。
书写 和写作一样
for i in lst:
print(lst)
time.sleep(1)
lst.remove(i)
内部迭代器持有一个指针,也称为索引,也称为列表中当前项的位置。loop指令在内部调用i=next(lst_iter),直到引发StopIteration异常
在您的情况下,第一次调用next(lst_iter)将返回列表[1,2,3,4,5]的first元素,即1。第二次调用next(lst_iter)返回列表[2,3,4,5]的第二个元素,即3。您正在迭代列表[1,2,3,4,5]并修改其长度。
书写 和写作一样
for i in lst:
print(lst)
time.sleep(1)
lst.remove(i)
内部迭代器持有一个指针,也称为索引,也称为列表中当前项的位置。loop指令在内部调用i=next(lst_iter),直到引发StopIteration异常
在您的情况下,第一次调用next(lst_iter)将返回列表[1,2,3,4,5]的first元素,即1。第二次调用next(lst_iter)将返回列表[2,3,4,5]中的second元素,即3
lst_iter = iter(lst):
for i in lst_iter:
print(lst)
time.sleep(1)
lst.remove(i)