簡體   English   中英

Python列表在遞歸函數中展開

[英]Python list unroll in a recursive function

以下是我的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'] )。 我嘗試使用本地列表變量進行相同操作,但仍然無法正常工作。 關於如何執行此操作的任何想法?

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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM