2014-01-28 96 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)會更好。好點子! –