我被要求编写一个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
。但是,它们都产生相同的结果。它们之间有任何明显的差异吗?
答案 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
。