我正在编写一个搜索功能,我在列表中搜索匹配的单词或字符。它看起来像
def search(seq, db):
return match(db, seq)
匹配是一个递归函数,它搜索列表并返回一个布尔值。 如何返回包含匹配对象的列表而不是True或False?
匹配函数如下所示:
def match(seq, pattern):
if not pattern:
return not seq
elif pattern[0] == '--':
if match(seq, pattern[1:]):
return True
elif not seq:
return False
else:
return match(seq[1:], pattern)
elif not seq:
return False
elif pattern[0] == '&':
return match(seq[1:], pattern[1:])
elif seq[0] == pattern[0]:
return match(seq[1:], pattern[1:])
elif isinstance(seq[0], list):
return match(seq[0], pattern)
elif isinstance(pattern[0], list):
return match(seq, pattern[0])
else:
return False
答案 0 :(得分:0)
我真的不明白你的match
功能在做什么。我猜你想要match
函数返回列表而不是布尔值。
您可以从更改基本案例开始。你看到的任何地方return False
或return True
代替' return [] or
返回[seq [0]] (assuming
seq [0]`是一个明智之举在你的比赛列表中返回。)
使用return match(...)
递归情况,您可以return [seq[0]] + match(...)
或类似的东西将当前匹配(如果适用)添加到递归调用返回的列表中。
这种预先列出的方法并不是特别有效,但我现在怀疑你的担忧。