要するに。これ以外のものを書くにはどうすればよいですか:for another in combinationOfK(K-1, L[i+1:]):
私の関数combinationOfK(...)は反復可能ではありません。
私はここからコードを理解しようとしています、解決策。Problem 26: Generate the combinations of K distinct objects chosen from the N elements of a list
私は収量が何をするか知っています。しかし、私はステートメントなしでコードを書き込もうとしています。イールドステートメント付きのyield
コード はこれです。
def combination(K, L):
if K<=0:
yield []
return
for i in range(len(L)):
thisone = L[i:i+1]
for another in combination(K-1, L[i+1:]):
yield thisone + another
質問は、yield-keyword-explained
私が収量を置き換えることができるという考えを私に与えました。彼らが与えるレシープは、私にとってはうまくいきませんが、次のとおりです。
ステートメントを含む関数が表示されたら、次の
yield
簡単なトリックを適用して、何が起こるかを理解します。
result = []
関数の先頭に行を挿入します。yield expr
それぞれをに置き換えますresult.append(expr)
。return result
関数の下部に行を挿入します。- イェーイ-これ以上の
yield
ステートメントはありません!コードを読んで理解します。- 関数を元の定義に戻します。
これを使用してyieldなしでコードを取得すると、これが得られます。コードが機能していません(関数は反復できません)。このコードをyieldなしで機能させるには、何を書く必要がありますか?
def combinationOfK(K,L):
result = []
if K <= 0:
result.append([])
return
for i in range(len(L)):
thisone = L[i:i+1]
for another in combinationOfK(K-1, L[i+1:]): # the error
result.append(thisone + another)
return result
このコードを使用して関数をテストしていますが、
the_list = ['a','b','c','d','e']
print list(combinationOfK(2, the_list))
エラーが発生しますTypeError: 'NoneType' object is not iterable
。