我正在尝试从字符串列表中提取每个字符串的第一个字母。我知道我可以使用抽象列表函数来完成这个,但我想使用结构递归来完成它。
请考虑以下代码:
def acronym(los)
if los != []:
return los[0][0] + acronym(los[1:])
我收到以下错误:
builtins.TypeError: Can't convert 'NoneType' object to str implicitly
虽然我对SOF做了一些关于这个错误的研究,但我还是不明白为什么当None
是一个字符串并且los[0][0]
也返回时,这个函数应该返回acronym(los[1:])
一个字符串。
有什么建议吗?
答案 0 :(得分:2)
每次acronym()
调用自己时,除了列表中的第一个字符串外,它都会调用los[1:]
。
最后,当你只是列表中的一个字符串时,“除了第一个字符串之外的所有字符串”都不是字符串,所以在下一次调用acronym()
内,los
是一个空列表,您的if los != []:
测试失败。
由于在这种情况下你没有显式返回任何内容,Python会隐式返回None
,这不能与你构建的字符串连接:
>>> "Hhay" + None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'NoneType' object to str implicitly