理解Python中的循环
我只是在学习Python,在下面的示例中提到了,但他们没有提到这种行为的原因理解Python中的循环,python,python-3.x,Python,Python 3.x,我只是在学习Python,在下面的示例中提到了,但他们没有提到这种行为的原因 words = ['cat', 'window', 'defenestrate'] for w in words[:]: if(len(w) > 6): words.insert(0,w) 据我所知,上面的代码将通过首先创建原始数组的副本来迭代元素,语法[:]表示从副本的开始位置到结束位置 文档中提到,如果我们使用的不是上述语法,而是 for w in words: if(len(w)
words = ['cat', 'window', 'defenestrate']
for w in words[:]:
if(len(w) > 6):
words.insert(0,w)
据我所知,上面的代码将通过首先创建原始数组的副本来迭代元素,语法[:]
表示从副本的开始位置到结束位置
文档中提到,如果我们使用的不是上述语法,而是
for w in words:
if(len(w) > 6):
words.insert(0,w)
它将创建一个无限列表,其中反复插入单词'defensetate'
有人能解释一下这种行为吗?还有,我是否能通过参考其他文档找到我问题的答案。我想你要找的是 注意当序列被 循环(这仅适用于可变序列,例如列表)。一 内部计数器用于跟踪下一个使用的项目,以及 这在每次迭代中递增。当这个计数器到达 循环终止的序列长度。这意味着如果 套件从序列中删除当前(或上一个)项 将跳过下一项(因为它获取当前项的索引) 这已经得到了治疗)。同样,如果套件插入 在当前项之前的序列中,当前项将 下次通过循环再次处理。这会导致严重的后果 可以通过使用一个片段创建临时副本来避免的bug 整个序列,例如
for x in a[:]:
if x < 0: a.remove(x)
[:]中x的:
如果x<0:a.移除(x)
我想你要找的是在 注意当序列被 循环(这仅适用于可变序列,例如列表)。一 内部计数器用于跟踪下一个使用的项目,以及 这在每次迭代中递增。当这个计数器到达 循环终止的序列长度。这意味着如果 套件从序列中删除当前(或上一个)项 将跳过下一项(因为它获取当前项的索引) 这已经得到了治疗)。同样,如果套件插入 在当前项之前的序列中,当前项将 下次通过循环再次处理。这会导致严重的后果 可以通过使用一个片段创建临时副本来避免的bug 整个序列,例如
for x in a[:]:
if x < 0: a.remove(x)
[:]中x的:
如果x<0:a.移除(x)
使用第二种方法,循环将遍历单词中的每个单词或元素,因为只有“DefenseTate”的长度大于6,因此循环将在列表的开头添加DefenseTate的副本。这意味着该循环将再次在DefenseTrante上运行,因为该单词现在位于列表的下一个位置。由于循环现在每个循环增加一个单词,因此具有的循环永远不会到达列表的末尾
在第一种方式中,由于迭代的列表是一个副本,所以此错误是固定的,因此当在列表中复制DefenseTate时,循环正在查看的列表保持不变,循环结束时使用第二种方式,循环将遍历单词中的每个单词或元素,因为只有“DefenseTate”的长度大于6,循环将在列表的开头添加defensetrate的副本。这意味着该循环将再次在DefenseTrante上运行,因为该单词现在位于列表的下一个位置。由于循环现在每个循环增加一个单词,因此具有的循环永远不会到达列表的末尾
在第一种方式中,由于迭代的列表是一个副本,因此此错误得到修复,因此当DefenseTate在列表中复制时,循环所查看的列表保持不变,循环结束,因为如果您在迭代列表的同时不断向列表末尾添加项,你是如何到达终点的?这是在起始位置添加一个元素
words。插入(0,w)
这是真的,对不起。不过,您仍在扩展列表的长度。因为如果您在不断向列表末尾添加项目的同时对列表进行迭代,您如何到达列表的末尾?这是在开始位置words添加元素。插入(0,w)
这是真的,抱歉。不过,您仍在延长列表的长度。谢谢您的回答。。。这是有意义的,因为一旦在当前位置之前添加元素,“最大长度”内部变量将增加一个,并且每次对当前元素进行一次又一次的处理,循环将永远不会结束。。对吧?谢谢你的回答。。。这是有意义的,因为一旦在当前位置之前添加元素,“最大长度”内部变量将增加一个,并且每次对当前元素进行一次又一次的处理,循环将永远不会结束。。正确的?