Изменить порядок элементов в матрице (python) - PullRequest
0 голосов
/ 05 ноября 2011
mat = [[0],[1],[2]]

Я хочу "циклически" элемент моей матрицы следующим образом:

mat = [[2],[0],[1]]
mat = [[1],[2],[0]]
mat = [[0],[1],[2]]
...

Как я могу изменить индекс этих элементов для цикла, как указано выше?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011
>>> for i in xrange(len(mat)):
...  print(mat[i:] + mat[:i])
... 
[[0], [1], [2]]
[[1], [2], [0]]
[[2], [0], [1]]
1 голос
/ 05 ноября 2011

Для больших списков наиболее эффективным будет использование комбинации deque и генератора :

>>> import collections.deque
>>> def list_cycler_gen(lst):
        q = collections.deque(lst,len(lst))
        while True:
            q.appendleft(q.pop())
            yield list(q)

>>> gen = list_cycler_gen([[0],[1],[2]])
>>> gen.next()
[[2], [0], [1]]
>>> gen.next()
[[1], [2], [0]]
>>> gen.next()
[[0], [1], [2]]

Это будет работать с любым содержимым списка,Кроме того, если вы хотите выполнить цикл в другом направлении, вы можете заменить первую строку цикла на:

q.append(q.popleft())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...