为什么这条线会弄乱整个输出?

Why is this line messing the whole output?

我正在尝试这样做:

输入:“4of Fo1r pe6ople g3ood th5e the2”

输出:“Fo1r the2 g3ood 4of th5e pe6ople”

使用此代码:

test = "4of Fo1r pe6ople g3ood th5e the2"
test = test.split()
x = 0
for i in test:
    x = re.search("[1-9]", i)
    x = int(x.group(0))-1
    test.insert(x, test.pop(test.index(i)))

但出于某种原因,For 循环中的最后一行破坏了 x 的输出(这是字符串列表中元素的新索引)。

最后一行之前(每次迭代后打印 x):

3

0

5

2

1

最后一行之后(每次迭代后打印 x):

3

5

3

3

1

5

当您在 for 循环中使用插入方法时,它会在迭代期间进行这些更新,从而在每次调用时更改每个索引处的值。

如果您在每次迭代结束时添加 print(test),您应该明白我的意思。解决此问题的一种方法是创建一个长度与 test 相同的列表,并在每次迭代时填充它。例如:

test = "4of Fo1r pe6ople g3ood th5e the2"
test = test.split()
x = 0
new_list = [0] * len(test)
for i in test:
    x = re.search("[1-9]", i)
    x = int(x.group(0))-1
    new_list[x] = i