使用python中的递归解决方案在字符串列表中查找字谜
Posted
技术标签:
【中文标题】使用python中的递归解决方案在字符串列表中查找字谜【英文标题】:find anagrams in a list of string using recursive solution in python 【发布时间】:2021-05-12 22:39:04 【问题描述】:我正在尝试解决以下问题:有一个类似下面的列表:
["hi", "ih", "ciao", "aoic", "bar", "foo", "rab", "oof"]
并且在被传递给函数之后,列表应该被简化为只出现在列表中的那些元素,不包括它们之后的所有字谜。
所以它应该输出:
["hi", "ciao", "bar", "foo"]
我正在尝试以递归方式解决这个问题,并拥有当前的解决方案,该解决方案由于变量结果(最后返回 stmt)上的“赋值前引用”错误而中断。
非常感谢任何提示!
def f(ls):
def is_not_ana(first, word):
return not sorted(first) == sorted(word) and word or None
if ls:
first = ls[0]
rest = ls[1:]
legal_str = [is_not_ana(first, word) for word in rest]
result = list(filter(None, [first] + legal_str))
return f(result[1:])
else:
return result
【问题讨论】:
【参考方案1】:当您到达递归结束时,ls
为空,因此当您返回 result
时,它永远不会在最后一次调用中定义。
您忘记返回first
。将return f(result[1:])
更改为return [first] + f(result[1:])
。
返回一个空列表将修复您的错误:
def f(ls):
def is_not_ana(first, word):
return not sorted(first) == sorted(word) and word or None
if ls:
first = ls[0]
rest = ls[1:]
legal_str = [is_not_ana(first, word) for word in rest]
result = list(filter(None, [first] + legal_str))
return [first] + f(result[1:])
else:
return []
print(f(["hi", "ih", "ciao", "aoic", "bar", "foo", "rab", "oof"]))
# ['hi', 'ciao', 'bar', 'foo']
【讨论】:
以上是关于使用python中的递归解决方案在字符串列表中查找字谜的主要内容,如果未能解决你的问题,请参考以下文章