我试图制作一个递归函数来摆脱列表中的所有元音。 出于某种原因,我的解决方案只返回一个空列表,我不明白如何解决它。 这是我的代码:
com.android.support:recyclerview-v7
答案 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:])
。