我试图让我的程序按我希望的方式运行,但我在这方面遇到了一些麻烦,希望有人能帮助解决这个问题。
我写了一个程序,它接受一个字符列表并将它们组合起来创建单词。列表中出现“”时单词结束。所以它看起来像这样:
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']))
