Я пытаюсь добавить тот же элемент в мой список после каждого элемента, который уже присутствует в списке, используя метод вставки - PullRequest
1 голос
/ 02 ноября 2019
mylist = ['.','.','.']
for i in mylist:
    mylist.insert(i,'x')


print(mylist)

Проблема в том, что я продолжаю получать сообщение об ошибке:

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

Я знаю метод join (), однако я пытаюсь заставить его работать так, чтобы элементы, которыми я являюсьдобавление может быть изменено позже.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2019

Проблема заключается в том, что вставка принимает в качестве параметра целое число и строку.

Когда вы пишете ...

for i in myList:

Вы принимаете i в качестве значения в каждой позиции. Поскольку значения в myList являются строками, это сообщение об ошибке, которое вы видите. Попробуйте вместо этого:

for i in range(len(myList)):

Возвращает список, состоящий из чисел, начиная с 0 и заканчивая до len (myList). Однако этот также представляет проблему. Список позиций генерируется до начала цикла, поэтому вы должны быть очень осторожны, так как добавление в список не меняет количество взаимодействий. Таким образом, самая простая реализация будет ...

i = 1
while i < len(myList):
    myList.insert(i, 'x')
    i += 2
2 голосов
/ 02 ноября 2019

Когда вы делаете for i in mylist, вы получаете фактические элементы списка в i, а не их индексы. Затем вы пытаетесь использовать insert - эта функция требует целочисленного индекса (и вместо этого получает строковый элемент). ( см. Здесь )

В дополнение к этому, вы перебираете список, одновременно меняя его длину, это плохая практика и рецепт для множества ошибок.

Правильный способ - создать новый список целиком:

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

Ваш new_list теперь: ['.', 'x', '.', 'x', '.', 'x']

1 голос
/ 02 ноября 2019

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...