查看不使用生成器的版本可能会有所帮助:
def perm_generator(lst):
res = []
if len(lst) == 1:
return [lst]
else:
for i in range(len(lst)):
for perm in perm_generator(lst[:i] + lst[i+1:]):
res.append([lst[i]] + perm)
return res
gen = perm_generator([1,2,3])
print gen # prints [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
正如您所看到的 - 这不是用“yield”“查找并替换”“return”。在“return”版本中,我们需要累积结果,而在“yield”版本中,需要做的就是“yield”当前排列。