我想问一问如何创建一个递归函数,该函数为每个字符拆分列表中包含的每个字符串,并在每次重复该过程时从开头删除一个字符串。我也想这样做,但是每次都要删除结尾处的一封信。例如,如果我有类似的东西:
list=['house','cat','dog']
我应该得到
['house','ouse','use','se','e','cat','at','t','dog','og','g']
和
['house','hous','hou','ho','h','cat','ca','c','dog','do','d']
我试图这样做,但是没有用;同样,它应该都是递归的...预先谢谢。
def substring(stringslist):
final=[]
for string in stringslist:
if len(string)==1:
return final.append(string)
else:
return final.append(substring(string[::-1]))
首先,让我们将您的函数固定为一个有效的迭代版本。
def substring(strings):
final = []
for string in strings:
while string:
final.append(string)
string = string[1:]
return final
接下来,让我们将final
变量移到参数中,以便可以在列表上构建对函数的递归调用。
def substring(strings, final=None):
if final is None: final = []
for string in strings:
while string:
final.append(string)
string = string[1:]
return final
下一步是将for
循环转换为递归。我们可以看到,基本情况是当列表strings
为空时,而递归情况是对的每个元素进行处理strings
。对于递归情况,我们将提取的第一个元素,strings
并将列表的其余部分传递给递归调用。
def substring(strings, final=None):
if final is None: final = []
# base case: empty list
if not strings: return final
# recursive case:
# work on first string in list
string = strings[0]
# add all substrings to final
while string:
final.append(string)
string = string[1:]
return substring(strings[1:], final)
将while
循环转换为递归是一个类似的过程:找到基本情况(empty string
)和递归情况(向添加单个子字符串final
),并为递归情况进行递归调用。
def substring(strings, final=None):
if final is None: final = []
if not strings: return final
string = strings[0]
if not string: return substring(strings[1:], final)
final.append(string)
strings[0] = string[1:]
return substring(strings, final)
最后,进行一些清理。
def substring(strings, final=None):
if final is None: final = []
if not strings: return final
if not string[0]: return substring(strings[1:], final)
final.append(string)
strings[0] = string[0][1:]
return substring(strings, final)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句