1

セットのすべてのサブマルチセットを生成し、それらを返す関数を Web で見つけました。しかし、コードが実際に何をするのかを理解するためにコードを一通り見ていくうちに、本当に行き詰まってしまいました。

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

def build_substrings(string):
    """ Returns all subsets that can be formed with letters in string. """
    result = []
    if len(string) == 1:
        result.append(string)
    else:
        for substring in build_substrings(string[:-1]):
            result.append(substring)
            substring = substring + string[-1]
            result.append(substring)
        result.append(string[-1])
    return result

さて、引数「ab」でそれを呼び出すとしましょう。基本ケースは無視されるので、else ブロックに移動して関数を再度呼び出します。引数は "a" になります。基本ケースに到達すると、結果に「a」が追加されます。今、私は結果を返します。for ループが「アクティブ化」されました。substring に "a" が割り当てられ、結果リストに追加されます。ここで、「結果」というリストに「a」を 2 回追加しました。どういうわけか、出力では一度だけ表示されます。ご助力ありがとうございます。

4

1 に答える 1

2

ここで、「結果」というリストに「a」を2回追加しました。

いいえ、resultはローカル変数です。最初に「a」を追加すると、はのローカルresultbuild_substrings("a")なり、2回目はのローカルresultになりbuild_substrings("ab")ます。これらはメソッドへの2つの異なる呼び出しであるため、を共有しませんresult

于 2012-06-26T23:06:50.090 に答える