【发布时间】:2021-01-12 21:30:09
【问题描述】:
我正在尝试创建一个递归函数,该函数通过单个字符串遍历任何级别的嵌套列表,无论给定字符是否在该列表中,都返回 True 或 False。
这是我的代码:
def inlist(character, lists):
"""Checks if a given character is in a list of any level"""
if lists[0] == character:
return True
elif isinstance(lists[0], list):
return inlist(character,lists[0])
elif not lists[0] == character:
return inlist(character,lists[1:])
else:
return False
当我运行代码时:("c", [["a", "b","c", "d"],"e"])
它似乎工作正常。但是,当我以这种方式输入列表时: ("c", [["a", "b",],["c", "d"],"e"])
它给了我一个错误,上面写着:IndexError: list index out of range
我不能这样写嵌套列表吗?如果是这样,为什么? 还是我的代码有什么问题导致它无法通过整个列表?
【问题讨论】:
-
在检查
lists是否有任何元素之前,请注意您的lists[0]。 -
嗯,如果我在上面加上另一个 if 语句并缩进其他所有内容会更好吗?
-
我会把你当前的
if变成elif,然后将if变成if not list:之类的东西。无需嵌套。 -
你的逻辑也有点缺陷,如果第一个元素是一个没有字符的列表,
elif将触发并返回 False,即使后面的列表可能返回 True。跨度> -
@Wups 切片实际上在空列表上是安全的。这是一个不错的功能。
标签: python list recursion nested