Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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 - Fatal编程技术网

迭代时插入Python列表

迭代时插入Python列表,python,Python,我使用的是Python3.5,而insert的性能并不像我预期的那样 scorelist = ["x","x"] for q in range(0, len(scorelist)): if scorelist[q] == "x": scorelist.insert((q), " ") 我希望这会留下如下最少的读数 scorelist = ["x", " ", "x", " "] 相反,它留给我的是 scorelist = [" ", " ", "x", "x"]

我使用的是Python3.5,而insert的性能并不像我预期的那样

scorelist = ["x","x"]

for q in range(0, len(scorelist)):
    if scorelist[q] == "x":
        scorelist.insert((q), " ")
我希望这会留下如下最少的读数

scorelist = ["x", " ", "x", " "]
相反,它留给我的是

scorelist = [" ", " ", "x", "x"]

我很困惑为什么这是输出。任何指导都将不胜感激。

在遍历任何容器时对其进行变异通常是一个坏主意

在您的例子中,在for循环开始时,会对lenscorelist求值一次。此时长度为2,因此范围仅为[0,1]。以后什么都不可能改变这一点

在第一次迭代中,q是0,scorelist[0]是x,所以

将记分表保留为

在第二次迭代中,q是1,对于scorelist的新值,scorelist[1]仍然是x,所以

将记分表保留为

然后循环结束。它并没有什么神秘之处,但也很不明显——这就是为什么在遍历容器时对容器进行变异是个坏主意-

编辑:得到你想要的 如果您决定在末尾以及之前的每一对元素之间插入一个空格,那么有一种模糊的方法:

for q in reversed(range(1, len(scorelist) + 1)):
    scorelist.insert(q, " ")
然后,例如,如果记分表以

['x', 'y', 'z']
该循环将使其保持不变

['x', ' ', 'y', ' ', 'z', ' ']

通过向后迭代,插入不会干扰原始列表元素的原始索引。如果这是令人困惑的提示:它是!;-,就像我为您的原始代码所解释的那样,一次只进行一次迭代。

在迭代任何容器时对其进行变异通常是个坏主意

在您的例子中,在for循环开始时,会对lenscorelist求值一次。此时长度为2,因此范围仅为[0,1]。以后什么都不可能改变这一点

在第一次迭代中,q是0,scorelist[0]是x,所以

将记分表保留为

在第二次迭代中,q是1,对于scorelist的新值,scorelist[1]仍然是x,所以

将记分表保留为

然后循环结束。它并没有什么神秘之处,但也很不明显——这就是为什么在遍历容器时对容器进行变异是个坏主意-

编辑:得到你想要的 如果您决定在末尾以及之前的每一对元素之间插入一个空格,那么有一种模糊的方法:

for q in reversed(range(1, len(scorelist) + 1)):
    scorelist.insert(q, " ")
然后,例如,如果记分表以

['x', 'y', 'z']
该循环将使其保持不变

['x', ' ', 'y', ' ', 'z', ' ']

通过向后迭代,插入不会干扰原始列表元素的原始索引。如果这是令人困惑的提示:它是!;-,就像我为您的原始代码所解释的那样,一次只进行一次迭代。

这太有道理了。非常感谢。这很有道理。非常感谢。
['x', ' ', 'y', ' ', 'z', ' ']