Python列表在递归函数中展开

时间:2016-12-13 05:26:13

标签: python recursion

以下是我的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']),而不是以递减方式返回。我尝试使用本地列表变量,仍然无法正常工作。有关如何做到这一点的任何想法?

1 个答案:

答案 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']
相关问题