简而言之。我该如何写除此之外的其他内容: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 的作用。但我试图在没有声明的情况下编写代码yield
。带有 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
声明!阅读并找出代码。- 将函数恢复为原始定义。
使用它来获取没有收益的代码给我这个。代码不工作(函数不可迭代)。我必须写什么才能让这段代码在没有产量的情况下工作?
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
。