insert() работает очень странно, переписывал несколько раз и почти тоже самое. Python
Я выполняю задание и столкнулся с тем, что инсерт, по непонятной причине дублирует кучу раз, то что надо сделать один раз. Задача изначально такая:
- Дан список: ['в', '5', 'часов', '17', 'минут', 'температура', 'воздуха', 'была', '+5', 'градусов'] Необходимо его обработать — обособить каждое целое число кавычками и дополнить нулём до двух разрядов: ['в', '"', '05', '"', 'часов', '"', '17', '"', 'минут', 'температура', 'воздуха', 'была', '"', '+05', '"', 'градусов'] Новый список не создавать! Сформировать из обработанного списка строку: в "05" часов "17" минут температура воздуха была "+05" градусов.
Сначала код выглядит так:
Далее я меняю его на этот:
arr = ['в', '5', 'часов', '17', 'минут', 'температура', 'воздуха', 'была', '+5', 'градусов']
for i in range(1, len(arr)):
if arr[i].isdigit() == True :
print(i, " = i")
val_1 = i + 1
print("Первый вал, те i + 1 =", val_1)
arr.insert(val_1, '"')
# if arr[i].isdigit() == True :
# print(i, " = i")
#
# arr.insert(i, '"')
Ситуация не особо стала лучше, потому что вывод теперь такой:
['в', '"', '"', '"', '"', '"', '"', '"', '"', '"', '5', '"', '"', '"', '"', '"', '"', '"', '"', '"', 'часов', '17', 'минут', 'температура', 'воздуха', 'была', '+5', 'градусов']
Даже если мы закоментим, то что я закоментим тут, результат нормальный(все рвано это не то что нужно):
['в', '5', '"', 'часов', '17', '"', 'минут', 'температура', 'воздуха', 'была', '+5', 'градусов']
Помогите, я не понимаю, где тут проблема.
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Метод insert добавляет элемент, смещая позиции следующих элементов, поэтому нужно корректировать индексы и отказаться от range(len(arr)), т.к. размер будет меняться.
Вместо этого, вручную меняйте индекс и используйте while
Попробуйте
def get_sign(x):
if x[0] in '+-':
return x[0]
arr = ['в', '5', 'часов', '17', 'минут', 'температура', 'воздуха', 'была', '+5', 'градусов']
i = 0
while i < len(arr):
sign = get_sign(arr[i])
if arr[i].isdigit() or (sign and arr[i][1:].isdigit()):
if sign:
arr[i] = sign + arr[i][1:].zfill(2)
else:
arr[i] = arr[i].zfill(2)
arr.insert(i, '"')
arr.insert(i + 2, '"')
i += 2
i += 1
print(arr)
# ['в', '"', '05', '"', 'часов', '"', '17', '"', 'минут', 'температура', 'воздуха', 'была', '"', '+05', '"', 'градусов']