在获得正确结果方面遇到一些问题。我试图通过递归传递一个单词元组和一个单词的项目。该方法应该返回元组减去项目。但是我收到的错误是“必须是str,而不是元组”。这是我到目前为止所拥有的。提前谢谢。
def filter_sequence(seq, item):
try:
if not seq:
return ()
elif item is seq[0]:
return filter_sequence(seq[1:], item)
else:
return seq[0] + filter_sequence(seq[1:], item)
except TypeError as e:
print(e)
示例:
如果我致电filter_sequence(("jelly","butter", "mustard"), 'butter')
我应该收到("jelly", "mustard")
的元组
我试图在str()中包装最后一个递归调用,但后来我只得到一个字符串。我不得不分手和格式化,这不是我想做的事。
我应该提一下,我的目标是使用内置的解决方案来实现这个结果,例如for循环,while循环,如果x在y ...等等。
答案 0 :(得分:2)
最后一个连接应该是单个元组,而不是元组中的项 - 字符串。此外,等式检查足以使元组中的项与参数匹配,此处不需要is
:
def filter_sequence(seq, item):
if not seq:
return ()
elif item == seq[0]:
return filter_sequence(seq[1:], item)
else:
return (seq[0],) + filter_sequence(seq[1:], item)
# ^^^^^^^^^
注意:由于某些CPython优化(字符串实习),is
检查可能适用于代码中较小的字符串,但绝对不适用于大字符串,并且不能保证工作跨Python实现的方式相同。因此,请使用==
。
答案 1 :(得分:1)
在这一行:
return seq[0] + filter_sequence(seq[1:], item)
seq[0]
是str
,您无法将其添加到filter_sequence
的返回值,其中(在此行中)是一个元组。您可能希望将seq[0]
添加到元组中:
return (seq[0],) + filter_sequence(seq[1:], item)
答案 2 :(得分:0)
一种更简单的方法可能是试试这个:
def filter_sequence(l, target, total):
if not l[1:]:
return tuple(list(total)+[l[0]])
if l[0] == target:
return filter_sequence(l[1:], target, total)
return filter_sequence(l[1:], target, tuple(list(total)+[l[0]]))
print(filter_sequence(("jelly","butter", "mustard"), 'butter'))
输出:
('jelly', 'mustard')