我正在对 python3 中的列表进行一些递归练习,但遇到了一个问题,我的返回列表会填充一些不需要的 None 类型。
这个特殊的练习是为了创建一个从列表中删除所有元音字符串的函数。输入列表中的所有元素都是长度为 1 的字符串,但列表也可以包含更多列表。
def without_vowels(arg):
vowels = "aeiuoåäöAEIUOÅÄÖ"
if not arg:
return arg
elif isinstance(arg, str):
if not arg in vowels:
return arg
else:
return ""
elif isinstance(arg, list):
if without_vowels(arg[0]) == "":
return without_vowels(arg[1:])
else:
return [without_vowels(arg[0])] + without_vowels(arg[1:])
预期输出:
>>> test = ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]
>>> without_vowels(test)
>>> [['h', 'j'], ['t', 's', 'c']]
最初,为了在检测时“删除”元音,我根本不会返回任何内容。这导致 None-types 被添加到列表中。
没有解决方法的输出(删除了第 10,11, 14-16 行):
>>> without_vowels(test)
>>> [None, ['h', None, 'j'], ['t', None, 's', 'c', None]]
为了解决这个问题,我更改了代码以在找到元音时返回一个空字符串,并在再次调用该函数以继续之前添加了一个“预检查”,基本上只是检查函数调用是否会找到一个元音(并返回"") 并且在这种情况下跳到列表参数的下一部分。
我觉得我遗漏了一些明显的东西,应该有一个更好的解决方案而不使用像这样的变通方法。
谢谢
编辑:此特定练习旨在通过双递归解决,而不是通过迭代和单递归的组合解决
POPMUISE
九州编程
翻过高山走不出你
相关分类