Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2012 13:27:55

xdshmn
Зарегистрирован: 2012-09-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Перестановка элементов по заданному условию

Здравствуйте.
Есть задача: получить числовую последовательность 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.
Спасибо

Отредактировано xdshmn (Сен. 14, 2012 13:38:38)

Офлайн

#2 Сен. 14, 2012 14:21:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Перестановка элементов по заданному условию



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



Офлайн

#3 Сен. 14, 2012 14:38:30

xdshmn
Зарегистрирован: 2012-09-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Перестановка элементов по заданному условию

Что-то получилось через такие костыли:

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, а можно, пожалуйста, с комментариями, не все понятно. Спасибо

Офлайн

#4 Сен. 15, 2012 11:10:17

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Перестановка элементов по заданному условию

Вот ещё вариант, не теряет последнее число при нечетной долине, и работает в “потоковом” режиме, т.е. можно большие массивы прогонять (файлы).

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,

Офлайн

#5 Сен. 15, 2012 13:40:37

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

Перестановка элементов по заданному условию

for i in range(1, len(a), 2):
     a[i - 1], a[i] = a[i], a[i - 1]
если длина нечетная, то последнее число остается на своем месте

Офлайн

#6 Сен. 15, 2012 16:57:00

xdshmn
Зарегистрирован: 2012-09-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Перестановка элементов по заданному условию

Спасибо большое! Принял к сведению все варианты.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version