Задать вопрос
@danila_belyy
Поступил в ВУЗ, хочу понять суть программирования.

Как посчитать суммы соседних элементов в списке?

Напишите программу, на вход которой подаётся список чисел одной строкой. Программа должна для каждого элемента этого списка вывести сумму двух его соседей. Для элементов списка, являющихся крайними, одним из соседей считается элемент, находящий на противоположном конце этого списка. Например, если на вход подаётся список "1 3 5 6 10", то на выход ожидается список "13 6 9 15 7" (без кавычек).

Если на вход пришло только одно число, надо вывести его же.

Вывод должен содержать одну строку с числами нового списка, разделёнными пробелом.

spisok = [int(e) for e in input().split()]
long = len(spisok) -1
s1 = []
suma = 0
stroka = ""

if long == 0:
	print(spisok[0])

elif long == 1:
	print(spisok[1]*2, end=' ')
	print(spisok[0]*2, end=' ')
	
else:
	
	for i in spisok:
		
		if i == spisok[0]:
			suma = spisok[1]+ spisok[-1]
			s1.append(suma)
			i += 1
			suma = 0
			
		elif (i != spisok[0]) and (i != spisok [-1]):
			ind1 = spisok.index(i) -1
			ind2 = spisok.index(i) + 1
			suma = spisok[ind1] + spisok[ind2]
			s1.append(suma)
			i += 1
			suma = 0
			
		
		elif i == spisok[-1]:
		 		suma = spisok[-2] + spisok[0]
		 		s1.append(suma)
		 		i += 1
		 		suma = 0

for k in s1:
	stroka += str(k) + " "
print(stroka)

Как этот код переделать, чтобы он корректно работал при повторении значений элементов (как мне избавиться от использования index())?
  • Вопрос задан
  • 1671 просмотр
Подписаться 1 Простой Комментировать
Ответ пользователя 0xD34F К ответам на вопрос (2)
0xD34F
@0xD34F
arr = [ int(n) for n in input().split() ]
arrLen = len(arr)
result = arr if arrLen == 1 else [ arr[i - 1] + arr[(i + 1) % arrLen] for i in range(arrLen) ]

print(' '.join(map(str, result)))
Ответ написан
Комментировать