[英]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.