2014-01-28 55 views
0

我想数组排序,所以它在重新排序在python数组

order = [0,1,2,3,4,5] #loop around trying all columns` 

开头,然后会经过,想这使1,2,3,4,5,0所有组合一旦它尝试了所有这些,就停下来。

有没有办法在Python中做到这一点?

+2

'order.sort()'工作.. –

+2

你想要所有的“旋转”还是所有的“排列”? –

+1

你想产生所有可能的排列,或者你想找到一个特定的排列,并停止搜索? –

回答

3

如果你只是想“旋转”的列表,看看在deque类:

>>> from collections import deque 
>>> order = [0,1,2,3,4,5] 
>>> order.sort() # ensure order is sorted 
>>> q = deque(order) 
>>> for _ in xrange(len(q)): 
... q.rotate(-1) 
... print q 
... 
deque([1, 2, 3, 4, 5, 0]) 
deque([2, 3, 4, 5, 0, 1]) 
deque([3, 4, 5, 0, 1, 2]) 
deque([4, 5, 0, 1, 2, 3]) 
deque([5, 0, 1, 2, 3, 4]) 
deque([0, 1, 2, 3, 4, 5]) 
>>> 
2

如果你的意思所有排列,而不是在多米尼克的答案转:

import itertools 

permutations = [ p for p in itertools.permutations(order) ] 

总共有720个排列,所以我不会打印它们:)

+1

'[p for ] <==> list()'将迭代器转换为列表可能非常昂贵,特别是对于排列,这会消耗O(n!)内存。让人惊讶。 –

+0

当然,根据他想要对排列做什么,他可能不需要将它们存储在列表中。在这种情况下,直接迭代itertools.permutations(order)会更好。好点子! –