Форум сайта python.su
0
Здравствуйте.
Есть задача: получить числовую последовательность N длинны L и в данной последовательности поменять местами позиции, стоящие на четных и нечетных местах. Т.е L на место L, L на место L и т.д.
Не понятно как реализовать условие, чтобы оно выбирало по сути пару четное-нечетное число.
Нашел подобную реализацию
from itertools import chain a = [1,2,3,4,5,6,7,8,9,10] print(list(chain(*(x for x in zip(a[1::2], a[::2])))))
Отредактировано xdshmn (Сен. 14, 2012 13:38:38)
Офлайн
568
xdshmn
Для меня это не подходит, нужно организовать через for
a = [1,2,3,4,5,6,7,8,9,10] res=[] for ev, odd in zip(a[::2],a[1::2]): res.extend((odd, ev)) print res
Офлайн
0
Что-то получилось через такие костыли:
N=[] K=[] S=[] L = int(input("Размер последовательности: ")) for i in range(0,L): a = input("Элемент последовательности: ") N.append(a) print("Исходная последовательность: ", N) for i in range(0,L,2): K = N[i:i+2] K.reverse() S += K print(S)
Офлайн
32
Вот ещё вариант, не теряет последнее число при нечетной долине, и работает в “потоковом” режиме, т.е. можно большие массивы прогонять (файлы).
def inv(it): it = iter(it) while True: a = it.next() try: b = it.next() except StopIteration: yield a raise StopIteration yield b yield a a = [1,2,3,4,5,6,7,8,9,10,11] for i in inv(a): print i,
Офлайн
18
for i in range(1, len(a), 2): a[i - 1], a[i] = a[i], a[i - 1]
Офлайн
0
Спасибо большое! Принял к сведению все варианты.
Офлайн