2

なぜこれをしないのですか?

def subsets(x):
    if not x:
        return [[]]
    else:
        return [x + y for x in [[], [x[0]]] for y in subsets(x[1:])]

print subsets(['a', 'b'])

これと同じ出力を生成します。

def subsets(x):
    if not x:
        return [[]]
    else:
        z = subsets(x[1:])
        return [x + y for x in [[], [x[0]]] for y in z]

print subsets(['a', 'b'])
4

1 に答える 1

6

x問題は、2つの異なるものに名前を使用していることです。xリスト内包内に変数として導入するxと、関数で定義されたものが非表示になります。結果として、xリスト内包表記 の最終はx、あなたが望んでいたものを参照していません。

の1つを別の名前に変更xすると、問題が修正されます。

def subsets(original_x):
    if not original_x:
        return [[]]
    else:
        return [x + y for x in [[], [original_x[0]]]
                      for y in subsets(original_x[1:])]

また、変数のよりわかりやすい名前を見つけてみることをお勧めします。これにより、誤って名前を再利用する可能性が低くなります。

于 2012-05-05T19:28:38.693 に答える