2015-04-01 3 views
0

В принципе, у меня есть матрица в примере python '(хотя и намного больше). Мне нужно обработать массив «example_what_I_want» с некоторым кодом python. Я думаю, что цикл for в порядке, но как я могу это сделать?Перевернутый массив и реверсивный каждый второй ряд

example= 
[1,2,3,4,5], 
[6,7,8,9,10], 
[11,12,13,14,15], 
[16,17,18,19,20], 
[21,22,23,24,25] 

example_what_I_want = 
[25,24,23,22,21], 
[16,17,18,19,20], 
[15,14,13,12,11], 
[6,7,8,9,10], 
[5,4,3,2,1] 

Таким образом, он увеличивается в виде змеиной моды. И первая строка должна быть отменена! а затем следовать этой схеме.

спасибо!

+2

Ваш 'example' массив на самом деле список списков? Попробуйте отредактировать так, чтобы ваш примерный код фактически создавал правильный объект Python при запуске в консоли, вы больше всего там. – Marius

ответ

5

Я предполагаю, что на самом деле example:

example = [[1,2,3,4,5], 
      [6,7,8,9,10], 
      [11,12,13,14,15], 
      [16,17,18,19,20], 
      [21,22,23,24,25]] 

В этом случае вы можете сделать:

swapped_example = [sublst if idx%2 else sublst[::-1] for 
        idx,sublst in enumerate(example)][::-1] 

Который даст вам:

In [5]: swapped_example 
Out[5]: 
[[25, 24, 23, 22, 21], 
[16, 17, 18, 19, 20], 
[15, 14, 13, 12, 11], 
[6, 7, 8, 9, 10], 
[5, 4, 3, 2, 1]] 
+1

Это правильная идея, но я подозреваю, что вы захотите вернуться на внешний слой, а не на внутренний слой. Например, попробуйте свой текущий код с ** даже ** количеством строк в матрице. – FMc

+0

@FMc спасибо, ты абсолютно прав –

+0

работает потрясающе! благодаря :) – Scientized

1

Или, вы можете использовать иТЭР.

a = [[1,2,3,4,5], 
[6,7,8,9,10], 
[11,12,13,14,15], 
[16,17,18,19,20], 
[21,22,23,24,25]] 

b = [] 

rev_a = iter(a[::-1]) 

while rev_a: 
    try: 
     b.append(rev_a.next()[::-1]) 
     b.append(rev_a.next()) 
    except StopIteration: 
     break 

print b 

Modified (Не знаю, что раньше. @Adam),

a = iter(a) 
while a: 
    try: 
     b.insert(0, a.next()[::-1]) 
     b.insert(0, a.next()) 
    except StopIteration: 
     break 

print b[::-1] 
Смежные вопросы