簡體   English   中英

如何返回此代碼列表的列表?

[英]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]]

  • 我不允許使用 itertools。

謝謝,

在每個遞歸步驟中,代碼都在原地改變列表。 因此,下面的代碼所做的就是在列表到達基本情況后復制一份,並返回它。 然后它將返回值收集到一個空列表中,以備份遞歸調用堆棧並輸出所有組合的列表。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM