S= list(map(int, input().split())) N=S for i in range (1,len(N),2): N[i]=S[-(i+1)]...

+909 голосов
5.9m просмотров

S= list(map(int, input().split())) N=S for i in range (1,len(N),2): N[i]=S[-(i+1)] print(N) Программа должна вывести список чисел, где четные позиции не меняются, а нечетные "зеркалятся". Не понимаю в чём у меня ошибка. По моей задумке список S остается неизменным в течении всей программы, но в реальности она всегда становится равной списку N. Почему так происходит (ведь я приравнял строки в начале программы, после они могут быть разными) и как исправить проблему?


Информатика (5.0k баллов) | 5.9m просмотров
Дан 1 ответ
+69 голосов

Во-первых, если я правильно понял слово "зеркалиться", то элементы не зеркалятся, так как их нужно менять местами: n[i], s[-(i+1)] = s[-(i+1)], n[i]. Но может тут я не прав, так как не уверен по поводу слово "зеркалиться".

А во-вторых, список S и N после приравнивания начинают ссылаться на один и тот же объект в памяти. Если нужно иметь именно копию списка, то нужно написать: n = list(s) или n = s.copy() или n = s[:].

(1.8k баллов)
+187

СУПЕР!!!

+123

Спасибо большое, действительно, Вы правы насчёт копии списка. Зеркалиться- заменить первое число на последнее, второе на предпоследнее и т.д. Вроде у меня всё работает.