обращение к соседним элементам в списке python 3.x
Изучаю Python по курсам на Cтепике и уже неделю бьюсь над задачей из курса, где:
На вход подаётся список чисел одной строкой.
Программа должна для каждого элемента этого списка вывести сумму двух его соседей.Для элементов списка, являющихся крайними, одним из соседей считается элемент, находящий на противоположном конце этого списка.
Если на вход пришло только одно число, надо вывести его же.
Вывод должен содержать одну строку с числами нового списка, разделёнными пробелом.
В ходе долгих размышлений, перелопачивания интернета и тд. Родил такой код:
numbers = [i for i in input().split()] # создание списка из введенных чисел
if len(numbers) == 1: # условие при котором выводит одиночное число назад
print (numbers[0])
else:
b = numbers # создаем список, где последнее число добавляем в
b.append (numbers[0]) # начало, а первое в конец для удовлетворения
b.insert(0,numbers[-2]) # условий по крайним элементам
result = [] # список с 'конечным' результатом
for i in b[1:-1]: # перебор элементов от индекса 1, до -2
y = i[i-1] + i[i+1] # сосед слева от i + сосед справа от i
result.append(y) # добавление результата сложения в ответ
print (result)
Но все попытки обратиться по индексам к 'соседям' i приводят к ошибкам...
Помогите неопытному разобраться что я делаю не так.
Ответы (1 шт):
У вас в коде ошибка в строке:
y = i[i-1] + i[i+1] # сосед слева от i + сосед справа от i
i это элемент списка, т.е. число. Поэтому вы пытаетесь из числа вытянуть какой-то элемент, из за чего и выдаётся исключение. Для решения проблемы, можно воспользоваться методом enumerate или же пройтись по значениям индексов с помощью range.
После чего код цикла будет такой:
for i in range(1,len(b)-1): # перебор элементов от индекса 1, до -2
y = b[i-1] + b[i+1] # сосед слева от i + сосед справа от i
result.append(y)
UPD: Ещё одна ошибка в первой строке.
numbers = [i for i in input().split()]
Вы записываете в список числа в строковом виде (['1','2','3']), для того чтобы переделать строки в числа нужно воспользоваться методом int:
numbers = [int(i) for i in input().split()]