以下是我的python递归函数代码:
char_list=[]
def xyz(sample_string):
global char_list
if sample_string!="":
char_list.append(sample_string[0])
xyz(sample_string[1:])
# once sample_string == "", the function will start unrolling
# While unrolling, I wanted to do certain operations on the char_list elements and other operations which includes recursive calls to function xyz()
例如,如果 sample_string 的初始值为 ABC ,我想要的是每次迭代 char_list 将添加,
iter 1 - char_list = ['A']
iter 2 - char_list = ['A','B']
iter 3 - char_list = ['A','B','C']
然后 sample_string 将变为空,函数将开始展开:
现在我希望按照以下顺序获取每次迭代中的列表,即
char_list = ['A','B','C']
char_list = ['A','B']
char_list = ['A']
这样我就可以在列表上进行进一步的操作了。我不能使用 return 关键字,因为在同一个函数中还有其他操作,包括对xyz()
的递归调用。
我写的代码并没有达到这个目的。对于每个展开,它将返回完整列表(['A','B','C']
),而不是以递减方式返回。我尝试使用本地列表变量,仍然无法正常工作。有关如何做到这一点的任何想法?
答案 0 :(得分:0)
def xyz(sample_string):
l = list(sample_string)
if l :
for i in reversed(range(1, len(l)+1)):
print(l[0:i])
将print
更改为yield
,该函数将成为生成器
您需要的是号码列表[1,2,3,4....]
,而不是list_[0:i]
来获取list_
的片段,一旦获得号码列表,您可以撤消或做别的。
出:
['A', 'B', 'C']
['A', 'B']
['A']