2017-03-14 25 views
0

基本的に私は数字のリストを取って、リストリスト内のすべての可能な出力を出力する再帰関数を書こうとしています。数字のリストをPythonで再帰的に並べ替える

マイコード:

def permutations(lst): 
    if len(lst) <= 1: 
     return lst 
    l = [] 
    for i in range(len(lst)): 
     m = lst[i] 
     remlst = lst[:i] + lst[i+1:] 
     for p in permutations(remlst): 
      l.append([m] + p) 
     return l 

私はint型を追加することはできないことに関するいくつかのエラーを取得しています。

シンプルな出力:itertoolsでそのための実装があり

>>>permutations([1,2]) 
[[1,2],[2,1]] 
+0

stacktrace :) – putonspectacles

答えて

1

:また

import itertools 
for p in itertools.permutations(list): 
    # do stuff 

は、独自の機能を修正するために、あなたが戻ってlen(lst) <= 1あなたの「基本ケース」のそれに気付きますリストではなく、リストのリストです。また、2番目のreturn文はループの外に移動する必要があります。

def permutations(lst): 
    if len(lst) <= 1: 
     return [lst] 
    l = [] 
    for i in range(len(lst)): 
     m = lst[i] 
     remlst = lst[:i] + lst[i+1:] 
     for p in permutations(remlst): 
      l.append([m] + p) 
    return l 
0

あなたはpermutations

for p in permutations(remlst): 

お使いのベースケースの結果を反復処理しているためには、そうでなければ、TypeError: can only concatenate list (not "int") to list

あなたはまた、必要なエラーを取得し、あなたの再帰的なケースないようにリストのリストを返す必要があります外側forループの後に戻る。

def permutations(lst): 
    if len(lst) <= 1: 
     return [lst] # [[X]] 
    l = [] 
    for i in range(len(lst)): 
     m = lst[i] 
     remlst = lst[:i] + lst[i+1:] 
     for p in permutations(remlst): 
      l.append([m] + p) 
    return l # return at end of outer for loop 
関連する問題