问题描述
在下面的代码中,在置换函数的 if 部分。如果我尝试使用 yield 它不起作用,但如果我使用 print 它起作用吗?可以有人代码有什么问题吗? 提前致谢!
def permute(li,l,r):
if l==r:
ele = ''.join(li)
print(ele)
yield ele
else:
for i in range(l,r+1):
#print(i)
li[i],li[l]=li[l],li[i]
permute(li,l+1,r)
li[i],li[i]
class Solution:
def find_permutation(self,S):
# Code here
s = list(S)
f = []
for i in permute(s,len(s)-1):
print(i)
f.append(i)
return f
if __name__ == '__main__':
t=int(input())
for i in range(t):
S=input()
ob = Solution()
ans = ob.find_permutation(S)
for i in ans:
print(i,end=" ")
print()
解决方法
当对产生结果的函数执行递归调用时,您需要在递归调用之前使用 yield from
。否则,您的递归调用产生的数据将被忽略:
def permute(li,l,r):
if l==r:
ele = ''.join(li)
yield ele
else:
for i in range(l,r+1):
li[i],li[l]=li[l],li[i]
yield from permute(li,l+1,r) # change here
li[i],li[i]