Страницы

Поиск по вопросам

понедельник, 22 апреля 2019 г.

Как узнать сумму соседних элементов для каждого элемента из списка

Здравствуйте! Изучаю Python, попалась такая задача:
"Напишите программу, на вход которой подаётся список чисел одной строкой. Программа должна для каждого элемента этого списка вывести сумму двух его соседей. Для элементов списка, являющихся крайними, одним из соседей считается элемент, находящий на противоположном конце этого списка. Например, если на вход подаётся список "1 3 5 6 10", то на выход ожидается список "13 6 9 15 7" (без кавычек).
Если на вход пришло только одно число, надо вывести его же."
В моём варианте пишет, что ошибка в строке 8, мол, не знает числа с таким индексом. Подскажите, пожалуйста, что я делаю не так, в чём ошибка?
a = [int(x) for x in input().split()] b = [] i = 0 if len (a) == 1: print(a) else: for c in a: b.append(int(a[i - 1]) + int(a[i + 1])) i = i + 1 print(b)


Ответ

Да, ошибка в том, что вы обращаетесь к элементу за пределами массива. Можно исправить, явно обозначив границы окна, в котором вы считаете сумму. Так можно обойтись без лишних условий на конец массива или использования кольцевого буфера:
initial_list = [1, 3, 5, 6, 10] sum_list = []
left_index = -1 right_index = -len(initial_list) + 1 middle_index = 0
while middle_index < len(initial_list): print(left_index, right_index) sum_list.append(initial_list[left_index] + initial_list[right_index]) left_index += 1 right_index += 1 middle_index += 1
print(sum_list)
Отрицательный индекс - это индекс "с конца" массива.
Код можно переписать и покороче, опустив объявления границ скользящего окна:
sum_list.append(initial_list[middle_index - 1] + initial_list[middle_index - len(initial_list) + 1])
Следуя по пути сокращения строк и далее, можно все записать в одну строку:
sum_list = [initial_list[index - 1] + initial_list[index - len(initial_list) + 1] for index, element in enumerate(initial_list)] print(sum_list)

Комментариев нет:

Отправить комментарий