[英]How do I return a list of list of this code?
我發現此代碼用於打印輸入列表中的所有排列,我想返回一個嵌套列表,但無法這樣做。 返回的列表要么為空,要么嵌套列表具有所有相同的排列。 我也可以在理解邏輯方面有所幫助。
參考: https://stackoverflow.com/questions/104420/how-do-i-generate-all-permutations-of-a-list。[解決方案之一]。 編輯 1:添加了列表分配。
l = []
def perm(a, k=0):
if k == len(a):
print(a)
l.append(a)
else:
for i in range(k, len(a)):
a[k], a[i] = a[i] ,a[k]
perm(a, k+1)
a[k], a[i] = a[i], a[k]
perm([1,2,3])
print(l)
Output 用於列表 l: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2 , 3]]
謝謝,
在每個遞歸步驟中,代碼都在原地改變列表。 因此,下面的代碼所做的就是在列表到達基本情況后復制一份,並返回它。 然后它將返回值收集到一個空列表中,以備份遞歸調用堆棧並輸出所有組合的列表。
def perm(a, k=0):
if k == len(a):
return [a[:]]
lst = []
for i in range(k, len(a)):
a[k], a[i] = a[i] ,a[k]
lst += perm(a, k+1)
a[k], a[i] = a[i], a[k]
return lst
print(perm([1,2,3]))
Output:
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
這是一個稍微改進的版本
def perm(a, k=[]):
if not a: return [k]
lst = []
for i in range(len(a)):
lst += perm(a[:i] + a[i+1:], k + [a[i]])
return lst
print(perm([1,2,3]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.