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]
等等
另请注意,在大型数据集上,插入必须移动列表中后面的所有项目,因此速度会很慢。我的解决方案消除了这一点,但创建了列表的副本。
我正在尝试在列表的特定索引中插入不同的元素。
给出这个例子:
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]
等等
另请注意,在大型数据集上,插入必须移动列表中后面的所有项目,因此速度会很慢。我的解决方案消除了这一点,但创建了列表的副本。