Имеется список целых чисел Измените исходный список, вставив элемент со значением k между всеми соседними элементами списка, имеющими одинаковый знак
Имеется список целых чисел. Измените исходный список, вставив элемент со значением k между всеми соседними элементами исходного списка, имеющими одинаковый знак. Считать, что 0 имеет общий со своими соседями знак.
Формат входных данных
В первой строке вводится последовательность целых чисел через пробел – элементы списка. Во второй строке вводится целое число k.
Формат выходных данных
Требуется вывести измененный список.
входные данные
1 0 9 4 2 9 55
выходные данные
1 55 0 55 9 55 4 55 2 55 9
входные данные
1 -10 -10 3 -5 0 -1 5 9 10 55
выходные данные
1 -10 55 -10 3 -5 55 0
Мой код:
s=list(map(int,input().split()))
k=int(input())
i=0
while i<len(s):
if s[i]>0 and s[i+1]>0:
s[i+2]=s[i+1]
s[i+1]=k
elif s[i]<0 and s[i+1]<0:
s[i+2]=s[i+1]
s[i+1]=k
else:
i+=1
print(*s)
Ответы (1 шт):
Твоя проблема в том, что ты работя с одним и тем же списком и добавляя элемент в него не сдвигаешь все остальные элементы назад. На твоем месте я бы не трогал исходный список а пытался сформировать новый в который попадут элементы старого списка + элемент k по мере необходимости
например так:
input_list = list(map(int, input().split()))
k = int(input())
i = 0
result_list = []
result_list.append(input_list[0])
for current_element in input_list[1:]:
if any((
current_element > 0 and result_list[-1] > 0,
current_element < 0 and result_list[-1] < 0,
current_element == 0 or result_list[-1] == 0
)): # нужно между элементами вставить k.
result_list.append(k)
result_list.append(current_element)
print(result_list)
условие внутри if можно упростить на current_element * result_list[-1] >= 0
у тебя, ктати, второй пример имеет некорректный вывод (результат короче исходного списка)
П.с.: при выборе названий для переменных не экономь буквы, называй их как-то осмысленно, чтобы легче было читать твой код