为什么两个函数的返回语句的不同缩进不会产生不同的结果?

时间:2013-11-08 21:38:12

标签: python

我被要求编写一个Python函数来确定列表是否已排序。我有两个版本:

def is_sorted(t):
    for i in range(len(t) -1 ):
        if t[i] <= t[i + 1]:
            return True
        return False

def is_sorted(t):
    for i in range(len(t) -1 ):
        if t[i] <= t[i + 1]:
            return True
    return False

这两者有什么区别?我在第一个缩进return False。但是,它们都产生相同的结果。它们之间有任何明显的差异吗?

2 个答案:

答案 0 :(得分:2)

这些都不符合你的要求。对于第一个,只会比较前两个项目,因为在循环的第一次迭代中你return,无论前两个项是否有序(尽管在这些情况下返回不同的结果)。 for循环并没有真正做任何事情。对于第二个项目,只有当项目出现故障时才会继续进行比较,因为您在第一次看到有序的对时从函数返回。

你想要的是当物品乱序时立即返回False(因为一旦你发现一对物品乱序,你知道列表没有排序,不需要检查任何物品只有当对 顺序时才继续前进,只有在检查完所有项目后才返回True。像这样:

def is_sorted(t):
    for i in range(len(t) - 1):
        if t[i] > t[i + 1]:
            return False
    return True

或者,使用Python的内置all()函数和生成器表达式:

def is_sorted(t):
    return all(t[i] <= t[i + 1] for i in range(len(t) - 1))

答案 1 :(得分:0)

你应该考虑缩进的影响 - 即你的return False陈述所属的阻止。

  • 在前一种情况下,当您第一次以升序方式排序两个元素时,您的函数将返回False
  • 在后一种情况下,当所有元素按升序排序时,您的函数将返回False