【发布时间】:2016-08-02 18:42:24
【问题描述】:
所以我在下面有一个递归函数,它不断用字母表中的每个小写字母替换 '_' 字符,直到这些可能的小写字母的所有组合都替换了 '_' 字符。
简单示例:
repl_underscores('__A')
>>>[a_A,b_A,c_A......aaA,abA,acA....zzA]
我让这个函数与 extend 一起构建列表,正如下面的评论所提到的,它反复就地修改相同的现有列表并完成工作。
为了练习,我想重写以在每次调用时构建一个新列表,并将该结果传递给连续的递归调用,目的是获得相同的结果。
它不起作用,我知道这与我在每次调用时都建立一个新列表这一事实有关,但我认为既然我在每次递归调用中传递了构建版本,我会没关系,因为这些调用会被通知更改。
我很难找出它在哪里坏了。我知道我可以通过修改同一个列表(通过可变默认值、全局变量或扩展)来使其工作,但我想在每次递归时建立一个新的干净列表。
def repl_underscores(letters,res=None):
if res is None: res = list()
if '_' not in letters: return res
repl = [letters.replace('_',letter,1) for letter in string.ascii_lowercase]
res = res + repl #using += works, due to extending being a mutation (same list referenced at each call)
for each in repl:
repl_underscores(each,res) #trying to pass modified list to keep building up
return res
print(repl_underscores('__DER'))
【问题讨论】:
-
您是否尝试使用
print语句来查看发生了什么?
标签: python algorithm recursion combinations