セットのすべてのサブマルチセットを生成し、それらを返す関数を 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 回追加しました。どういうわけか、出力では一度だけ表示されます。ご助力ありがとうございます。