for 循环是否检查每次迭代是否位于可迭代的末尾?

问题描述 投票:0回答:1

我是编码新手,因此为了练习,我制作了一个函数,从传递给函数的任何字符串中删除所有特定字符。我发现我的 for 循环没有按预期工作。它并没有删除每个“.”。

lst = ['.','.']

for item in lst:
    if item == '.':
        lst.remove('.')

print(lst)

哪个输出:

['.']

在尝试不同的输入并思考这一点之后,我得出的结论是,for 循环将在循环的每次迭代中检查它是否位于列表的末尾。否则这个循环会产生索引错误。与循环的第一次迭代一样,循环的索引为 0。然后它删除第一个 '.',留下列表 ['.']。现在第二次迭代时索引为 1,但列表只有一个元素。所以循环不在索引范围内。

这是真的吗,还是我错过了什么?

python for-loop
1个回答
0
投票

你是对的,只是不是由

for
进行检查。
for
一般适用于所有可迭代对象。它获取一个迭代器并重复调用迭代器的
__next__
方法,直到该方法引发
StopIterator
异常。

我们可以看到没有循环的相同过程

>>> lst= ['.', '.']
>>> i_list = iter(lst)
>>> i_list.__next__()
'.'
>>> lst.remove('.')
>>> i_list.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>
© www.soinside.com 2019 - 2024. All rights reserved.