Insert in a for loop 给了我一个无限循环,并且不能在我想要的地方插入我想要的东西

Insert in a for loop gives me an infinite loop, and can't insert what I want where I want

我正在尝试在列表的特定索引中插入不同的元素。

给出这个例子:

l = [1,2,3,4,5]

假设我想在列表的每个值之后系统地插入字符串 'k'。 为此,我知道我可以使用 enumerate:

r = l.copy()
for idx, val in enumerate(l):
    r.insert(idx, 'k')

或使用计数器手动完成:

index = 0
for i in l:
    index += 1
    l.insert(index, 'k')
    print(index)
    if index >=5:
        index = 0
        break

但是当我尝试两者时,它只是将值插入与同一索引中列表中的值一样多的次数:

[1, 'k', 'k', 'k', 'k', 'k', 2, 3, 4, 5]

我错过了什么?

提前致谢。

解决方案:

我会做的是:

l = data
l2 = []
for i in data:
    l2.append(i)
    l2.append("k")

您的代码中发生了什么:

您首先在索引 1 处插入 k

[1, index 1 , 2, 3, 4] => [1, k, 2, 3, 4]

那么如果你在索引 2 处插入,

[1, k, index 2 , 2, 3, 4] => [1,k,k,2,3,4]

等等

另请注意,在大型数据集上,插入必须移动列表中后面的所有项目,因此速度会很慢。我的解决方案消除了这一点,但创建了列表的副本。