Найти - Пользователи
Полная версия: Перестановка элементов по заданному условию
Начало » Python для новичков » Перестановка элементов по заданному условию
1
xdshmn
Здравствуйте.
Есть задача: получить числовую последовательность 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])))))


Для меня это не подходит, нужно организовать через for.
Спасибо
FishHook


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
xdshmn
Что-то получилось через такие костыли:
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)
FishHook, а можно, пожалуйста, с комментариями, не все понятно. Спасибо
o7412369815963
Вот ещё вариант, не теряет последнее число при нечетной долине, и работает в “потоковом” режиме, т.е. можно большие массивы прогонять (файлы).
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,
adray
for i in range(1, len(a), 2):
     a[i - 1], a[i] = a[i], a[i - 1]
если длина нечетная, то последнее число остается на своем месте
xdshmn
Спасибо большое! Принял к сведению все варианты.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB