对于非特定标题感到抱歉,但我无法更好地解释它。
我有这个python代码:
def longestWord_with_recursion(wrds):
if type(wrds) == str:
return len(wrds),wrds
return max([longestWord_with_recursion(x) for x in wrds])
(...)
words = [list of words]
print(longestWord_with_recursion(words))
len(wrds),wrds 的回报给出了以下内容:
(11, 'programming') #programming is the correct answer
但是,由于我只想回复这个词,我用 return wrds 替换回报,这给了我以下内容:
you #another word in the list, but the wrong one
为什么会这样?如果我添加另一个返回值,为什么它会给我正确的单词,但如果我只返回这个,那么它是不是?怎么能解决这个问题?
E:单词列表是:
<''''','丑闻',''','教育','是','那','每一个','时间','你','教','某事','你','剥夺','a','学生','','','愉快','和','受益',''','发现','西摩','Papert', '出生','二月','29','1928','死','七月','三十一','2016','如果','调试','是',''','过程',''','删除','错误','然后','编程','必须','是',''','过程',''','推','他们', 'in','Edsger','W','Dijkstra']
答案 0 :(得分:0)
当您只返回单词时,使用递归语句形成的列表只是单词列表。 “你”是列表中最大的单词(按字母顺序排在最后一个单词)。您必须返回长度,以使之前的呼叫级别对该数据进行操作。
请注意,除了句法意义之外,这不是任何递归。你的函数有两个不完全交互的不同操作:如果用字符串调用它,它会做一件事;如果使用任何其他数据类型调用它,它将迭代。除非你有嵌套的单词列表,否则这不是真正的“基本案例”和“递归案例”。
答案 1 :(得分:0)
试试这个:
def longestWord_with_recursion(wrds):
if type(wrds) == str:
return len(wrds),wrds
return max([longestWord_with_recursion(x) for x in wrds])[1]
print(longestWord_with_recursion(words))
它返回了两个元素的列表,所以你只需要指出你要打印的元素是第二个元素!
答案 2 :(得分:0)
这似乎不正确使用递归。看起来你更像是试图用longestWord_with_recursion
函数重载两个函数:
(word_length, word)
和您可以将整个功能重写为:
def longest_word(iterable):
return max([(len(x), x) for x in iterable])
也将返回最长的单词,同时仍然使用内置的max
函数。这将返回(word_length, word)
的元组,因此如果您只想返回单词,则可以执行以下操作:
def longest_word(iterable):
return max([(len(x), x) for x in iterable])[1]
注意最后的[1]
。
修改强>
在评论中查看max
的文档以及@Kenny的评论,可以更简单地使用:
def longest_word(iterable):
return max(iterable, key=len)
此时,它真的值得成为它自己的功能吗?