2011-07-18 47 views
-1

我正在寫一個函數,稱爲permutate(lst,acc),它在整數列表上進行排列,找到所有可能的排列組合。例如,permutate([1,2,3],[0])應該返回[123,132,213,231,312,321],但不是按順序排列。 acc是一個累加器,它是通過遞歸進行的。到目前爲止,我有在列表上排列

def permutate(lst, acc): 
    if not lst: 
     return acc 
    else: 
     return reduce(lambda x, y: x + y, 
     map(lambda z: permutate(lst[:].remove(z), 
     map(lambda a: a * 10 + z, acc[:])), lst[:])) 

當前permutate([1,3,2,5],[0])返回[1,3,2,5]。我猜這個函數並沒有進行遞歸步驟。我還通過添加[:]來避免列表可變。 有什麼想法?

+1

不要重新發明輪子。 'itertools.permutations' – JBernardo

回答

0

使用Python庫itertools:

from itertools import permutations 
permutations([1,2,3]) 

它包括在Python,所以你不會有安裝任何東西。