我使用的是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"]
我很困惑为什么这是输出。任何指导都将不胜感激。你知道吗
Tags:
在遍历任何容器时对其进行变异通常是个坏主意。你知道吗
在您的例子中,
len(scorelist)
在for
循环开始时计算一次。当时长度是2,所以范围就是[0, 1]
。以后什么也改变不了这一点。你知道吗在第一次迭代中,
q
是0,scorelist[0]
是"x"
,所以将
scorelist
保留为在第二次迭代中,
q
是1,对于scorelist
的新值,scorelist[1]
仍然是"x"
,所以将
scorelist
保留为然后循环结束。关于它,没有什么真正神秘的东西,但也一点都不明显——这就是为什么在遍历容器时对容器进行变异是个坏主意;-)
编辑:得到你想要的
如果您决定在结尾处以及之前的每一对元素之间插入一个空格,那么有一种模糊的方法:
然后,例如,如果
scorelist
开始为这个循环会让它
通过“向后”迭代,插入不会干扰原始列表元素的原始索引。如果这让人困惑(提示:是的!;-)),只需一次迭代一次,就像我为您的原始代码所解释的那样。你知道吗
相关问题 更多 >
编程相关推荐