Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Python中的循环_Python_Python 3.x - Fatal编程技术网

理解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)

我只是在学习Python,在下面的示例中提到了,但他们没有提到这种行为的原因

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)
这是真的,抱歉。不过,您仍在延长列表的长度。谢谢您的回答。。。这是有意义的,因为一旦在当前位置之前添加元素,“最大长度”内部变量将增加一个,并且每次对当前元素进行一次又一次的处理,循环将永远不会结束。。对吧?谢谢你的回答。。。这是有意义的,因为一旦在当前位置之前添加元素,“最大长度”内部变量将增加一个,并且每次对当前元素进行一次又一次的处理,循环将永远不会结束。。正确的?