mat = [[0],[1],[2]]
我想像这样循环矩阵中的元素:
mat = [[2],[0],[1]]
mat = [[1],[2],[0]]
mat = [[0],[1],[2]]
...
如何将这些元素的索引更改为像上面那样的循环?
>>> for i in xrange(len(mat)):
... print(mat[i:] + mat[:i])
...
[[0], [1], [2]]
[[1], [2], [0]]
[[2], [0], [1]]
对于大型列表,使用deque和generator的组合将是最有效的:
>>> 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())