0

我被要求编写一个 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了第一个。但是,它们都产生相同的结果。它们之间有细微的差别吗?

4

2 回答 2

2

这些都不是你想要的。与第一个相比,只会比较前两项,因为您return在循环的第一次迭代中无论前两项是否按顺序排列(尽管在这些情况下您返回不同的结果)。循环实际上并for没有做任何事情。使用第二种方法,只有在无序时才会继续比较项目,因为您在第一次看到有序的 pair 时从函数返回。

您想要的是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))
于 2013-11-08T21:42:29.743 回答
0

您应该考虑缩进的影响 - 即您的return False语句属于哪个块。

  • 在前一种情况下,您的函数将False在您第一次有两个按升序排列的元素时返回。
  • 在后一种情况下False,当所有元素按升序排序时,您的函数将返回。
于 2013-11-08T21:41:21.033 回答