Как поменять местами соседние элементы в списке?
Хочу для списка реализовать обмен значений соседних элементов.
То есть, значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д..
При нечетном количестве элементов последний сохранить на своем месте.
Для заполнения списка элементов необходимо использовать функцию input().
l = list(input("Введите элементы списка: "))
l[::2], l[1::2] = l[1::2], l[::2]
print(l)
Если без input(), то все работает.
Ответы (3 шт):
Во-первых нужно правильно разделять вводимые элементы в список. Вы разделяете каждый введённый символ, а обычно вводимые данные разделяют по пробелам. Во-вторых размер срезов у вас будет разный, а нужно сделать их одинаковым, чтобы не было ошибки. Если вы отрезаете один элемент спереди у одного среза, то у другого надо отрезать один элемент с конца, тогда они получатся одинаковыми и при чётной длине списка и при нечётной:
l = input("Введите элементы списка: ").split()
l[:-1:2], l[1::2] = l[1::2], l[:-1:2]
print(l)
Как вариант, возможно, c несколько большей читабельностью:
my_list = input("Введите элементы списка: ").split()
for i in range(0, len(my_list)-1, 2):
my_list[i], my_list[i+1] = my_list[i+1], my_list[i]
print(my_list)
при
Введите элементы списка: >? 2 1 4 3 6 5 7
выведет:
['1', '2', '3', '4', '5', '6', '7']
Ну и вариант который вообще не читабелен. :)
lst_in = input("Введите элементы списка: ").split()
lst_out = sum(list(zip(*list(zip(*zip(*[iter(lst_in+[lst_in[-1]])]*2)))[::-1])),())[:len(lst_in)]
print(lst_out)