【发布时间】:2013-07-23 04:54:57
【问题描述】:
作为一个递归练习练习,我正在编写一个 Python 函数,它递归地识别输入列表是否按从小到大排序,仅实数,然后返回一个布尔值。
我的代码是:
def det_sorted(listA):
if len(listA) == 1:
return(True)
else:
if listA[0] <= det_sorted(listA[1:]):
return(True)
elif listA[0] > det_sorted(listA[1:]):
return(False)
此函数始终返回“False”。一般问题:如何正确递归地遍历列表?我的具体问题:我在这里做错了什么?
【问题讨论】:
-
我的第一个答案是“你不知道”。由于您已经有
sorted()可用,所以其他任何事情都更加复杂和昂贵。 -
查看问题所在的一种简单方法是意识到对
sorted()的任何调用都将返回True或False,并且您的if语句正在对@ 进行不等式检查987654327@ 或False。这不是你想要的。 -
你不应该称它为
sorted(),因为这会影响内置函数。is_sorted()会很好。 -
1) 永远不要使用已被内置函数使用的名称 2) 谓词(即返回
True/False输入条件的函数)的名称应该以动词开头现在时:例如is_sorted、has_fruits、can_kill、has_moo_powers。执行动作的函数应该有动词/句子作为名称:sort、grow_fruits、kill、use_moo_powers。使用过去时可能表明该操作未就地进行(例如,sorted表明返回的值已排序,而不是原始序列正在排序)。 -
@bakuriu 啊。很高兴知道。我会做出这些改变。
标签: python list sorting recursion python-3.x