數字排列功能,創建所有可能排列的列表。 在此代碼上工作了一段時間,它運行良好,我試圖找到一個更短,更有效的寫作方式。從數字變量或數字列表中排序的數字排列列表,無重複
a = [3,7,9]
perms = lambda a:list(sorted(z) for z in map(lambda p:dict.fromkeys([str(sum(v* (10**(len(p) -1 - i)) for i,v in enumerate(item))).zfill(len(a)) for item in itertools.permutations(p)]).keys(), [[int(x) for x in ''.join(str(i) for i in a)]]))[0]
代碼返回:
['379', '397', '739', '793', '937', '973']
你也可以輸入數字字符串變量
a = '468'
perms(a)
['468', '486', '648', '684', '846', '864']
這是代碼,而不是返回元組或列表不同。它以字符串格式返回結果列表。此外,您可以輸入數字字符串,元組或列表。相信我在發佈之前檢查過任何重複內容。
三位數工作得很好
perms('000')
['000']
其他代碼生成此
['000', '000', '000', '000', '000', '000']
此外,該代碼返回的有序列表。
[如何在Python中生成列表的所有排列]可能的重複(http://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list-in-python ) – Tempux
如果您可以使用模塊,那麼:https://docs.python.org/2/library/itertools.html?highlight=itertools#itertools.permutations –
我發現這篇文章對學習如何生成排列非常有幫助。 http://sahandsaba.com/combinatorial-generation-using-coroutines-in-python.html –