3

この問題についてすでに多くの投稿があったことをお詫び申し上げます。ただし、自分の実装でどこが間違っているのかを確認するのに苦労しています。そのため、文字列を受け取り、可能なすべての順列をリストの形式で返す関数を作成しようとしています。

理論的には、次のようになります。

allPermutations("abc...z") = [a + allPermutations(b,c,...z), b + allPermutations(a,c...z)...]

私の現在の実装は、文字列「Hello」でテストすると、一連の重複順列を出力します。誰が私が間違っているのかを知るのを手伝ってくれますか? よろしくお願いします!

コードは次のとおりです。

def allPermutations(strng):
    if len(strng) ==1:
        return [strng]
    perm_list = []
    for i in strng:
        smallerStr = strng.replace(i,"",1)
        z = allPermutations(smallerStr)

        for t in z:
            perm_list.append(i+t)        
    return perm_list
4

2 に答える 2

2

itertoolsモジュールをよく見てください。これだけになります:

import itertools
[ ''.join(i) for i in itertools.permutations(mystring) ]

一例:

[ ''.join(i) for i in itertools.permutations('abc')]
#['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
于 2013-05-15T22:49:57.567 に答える