【发布时间】:2020-03-05 13:58:09
【问题描述】:
这段代码生成排列,我对最后的else: return 的工作原理感兴趣。
all_str = []
def permu(iterable,r=None):
pool = tuple(iterable)
n = len(pool)
r = n if r is None else r
if r > n:
return
indices = list(range(n))
cycles = list(range(n, n - r, -1))
all_str.append( tuple(pool[i] for i in indices[:r]))
while True:
for i in reversed(range(r)):
cycles[i] -= 1
if cycles[i] == 0:
indices[i:] = indices[i + 1:] + indices[i:i + 1]
cycles[i] = n - i
else:
j = cycles[i]
indices[i], indices[-j] = indices[-j], indices[i]
all_str.append( tuple(pool[i] for i in indices[:r]))
break
else: # here
return
permu("abcde",4)
底部的else 指的是什么?我知道您可以在循环中使用if,在循环外使用else,但这似乎并非如此,因为if 已经由else 处理。
当我删除 else: return 时,该函数会以重复的方式无休止地生成排列。
我想知道这一点,因为我需要在 C++ 中复制这段代码。
任何帮助或建议将不胜感激:)
【问题讨论】:
-
将“for else”读作“for finally”更清楚。如果 for 循环正确完成,则执行 else。 read more。在您的示例中,它将在 for 完成后返回(退出 while)。
-
@Raphael 是的!谢谢!
标签: python loops if-statement permutation