@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())?
  • Вопрос задан
  • 1472 просмотра
Пригласить эксперта
Ответы на вопрос 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)))
Ответ написан
Комментировать
@alexbprofit
Junior SE
e = [int(el) for el in input().split(" ")]

result = []

for i in range(len(e)):
  if i == 0:
    result.append(e[i] + e[-1])
  elif i == len(e) - 1:
    result.append(e[i-1] + e[0])
  else:
    result.append(e[i - 1] + e[i+1])
result = [str(el) for el in result]
print( ' '.join(result))


Но все же вариант который привели в ответе выше, короче
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы