递归功能,摆脱元音

时间:2015-11-17 16:14:29

标签: python regex string python-3.x recursion

我试图制作一个递归函数来摆脱列表中的所有元音。 出于某种原因,我的解决方案只返回一个空列表,我不明白如何解决它。 这是我的代码:

com.android.support:recyclerview-v7

1 个答案:

答案 0 :(得分:1)

这是一个固定版本:

def remove(seq):
    if not seq:
        return []
    elif isinstance(seq[0], list):
        return [remove(seq[0])] + remove(seq[1:])
    elif seq[0] in ["a", "e", "i", "o", "u"]:
        return remove(seq[1:])
    else:
        return [seq[0]] + remove(seq[1:])

print(remove(["a", "b", "c", ["d", "e"], "f", "g", "h", "i"]))

输出:

['b', 'c', ['d'], 'f', 'g', 'h']

第一个错误是您使用'或'的方式。与多个值进行比较。你可以写seq[0] == "a" or seq[0] == "b" or ...,或像我一样使用in和序列。为了获得更好的性能,可以将元音放入一组中,如下所示:

vowels = {"a", "e", "i", "o", "u"}

def remove(seq):
    if not seq:
        return []
    elif isinstance(seq[0], list):
        return [remove(seq[0])] + remove(seq[1:])
    elif seq[0] in vowels:
        return remove(seq[1:])
    else:
        return [seq[0]] + remove(seq[1:])

print(remove(["a", "b", "c", ["d", "e"], "f", "g", "h", "i"]))

您的第二个错误是上一个return语句。您尝试使用+运算符将字符串连接到列表的前面。实际上你正在做类似"b" + ["c"]的事情,它会抛出一个错误。您无法与+一起添加列表和非列表。

第三,为了维护嵌套列表的结构,我必须在列表中包含remove()的返回值,如果我们有一个嵌套列表return [remove(seq[0])] + remove(seq[1:])