我正在尝试使用插入方法在列表中已经存在的每个元素之后将相同的元素添加到我的列表中

I am trying to add the same element to my list after every element that is already present in the list using the insert method

mylist = ['.','.','.']
for i in mylist:
    mylist.insert(i,'x')


print(mylist)

问题是我不断收到错误消息:

TypeError: 'str' object cannot be interpreted as an integer

我知道 join() 方法,但我正在努力让它发挥作用,以便以后可以对我添加的元素进行操作。

当您执行 for i in mylist 时,您会得到 i 中的实际列表项,而不是它们的索引。然后您尝试使用 insert - 该函数需要一个整数索引(并且正在获取一个字符串项)。 (see here)

除此之外,您在迭代列表的同时还更改了它的长度,这是一种不好的做法,并且会导致很多错误。

正确的方法是完全创建一个新列表:

mylist = ['.','.','.']
new_list = []
for item in mylist:
    new_list.append(item)
    new_list.append('x')

您的 new_list 现在是:['.', 'x', '.', 'x', '.', 'x']

list.insert() 方法使用索引而不是元素本身。当你说 for i in mylist 时,你正在迭代元素,它们是字符串,所以你会得到你提到的错误,因为索引不能是 str。 第一条思路应该是按索引进行,但是话又说回来,如果您在迭代列表的同时修改列表,则每次插入元素时都会修改列表,因此会得到意想不到的结果。这是非常气馁的。不过,如果你想这样做,那就来吧:

mylist = ['.','.','.']
for i in range(len(mylist)):
    mylist.insert(i+i+1,'x')

print(mylist)

输出:

['.', 'x', '.', 'x', '.', 'x']

问题是 insert 将 int 和 string 作为参数。

当你写...

for i in myList:

您将 i 作为每个位置的值。由于 myList 中的值是字符串,这就是您看到的错误消息。改为尝试:

for i in range(len(myList)):

这个 returns 一个列表,由从 0 开始到 len(myList) 之前的数字组成。然而,这 提出了一个问题。位置列表是在循环开始之前生成的,因此您必须非常小心,因为添加到列表不会改变交互次数。因此,最简单的实现是...

i = 1
while i < len(myList):
    myList.insert(i, 'x')
    i += 2