Skip to main content
 首页 » 编程设计

python之可以用递归完成吗

2025年05月04日8webabcd

我试图让我的程序按我希望的方式运行,但我在这方面遇到了一些麻烦,希望有人能帮助解决这个问题。

我写了一个程序,它接受一个字符列表并将它们组合起来创建单词。列表中出现“”时单词结束。所以它看起来像这样:

inp = ['r','e', 'e', 'l', ' ', 'y', 'e', 'l', 'l', 'o', 'w', ' ', 'g', 'e', 'l',' ', 'p','e','e','k'] 
outp = ['reel', 'yellow', 'gel', 'peek'] 

代码如下所示:

def mer(inp, outp=[]): 
    tail = 0 
    for item in inp: 
        if item == (" "): 
            inp[:tail] = ["".join(inp[:tail])] 
            outp.append(inp.pop(0)) 
            inp.remove(item) 
        if ((" ") in inp) == False: 
            inp[:] = ["".join(inp[:])] 
            outp.append(inp.pop(0))         
        tail +=1 

现在要获得输出(在上面输入的情况下)我需要调用 mer 两次。有没有办法让它一直运行到输入列表为空,或者使用递归?

这只是一个编程练习,所以它可能会做得更好,但现在这就是我所需要的。

请您参考如下方法:

您可以使用join 和split:

>>> ''.join(inp).split() 
['reel', 'yellow', 'gel', 'peek'] 

# recursion 
from itertools import takewhile 
 
def fun(x): 
    if not x: 
        return 
    y = list(takewhile(lambda i:i!=' ', x)) 
    yield ''.join(y) 
    for z in fun(x[len(y)+1:]): 
        yield z 
 
list(fun(['r','e', 'e', 'l', ' ', 'y', 'e', 'l', 'l', 'o', 'w', ' ', 'g', 'e', 'l',' ', 'p','e','e','k']))