如何创建一个 for 循环,如果列表的数字按顺序返回 True,否则返回 False?



我试图编写一个函数,该函数循环访问列表中的项目,如果项目大于列表中的前一项,则返回 True,如果不是,则返回 False,但它似乎无法正常工作。谁能指出我的错误。

def inc_fun(x):
for i in range(len(x)):
for xi in x:
if x[i] > x[i-1]:
return True
else:
return False
inc_fun([1,2,3,7,9])

返回:假

如果我运行,这应该是真的:

inc_fun([1,5,3,2,9])

这也返回 false。

我感谢任何帮助:)

在我看来,您实际上想检查列表中的数字是否按从小到大的顺序排列。您可以通过以下方式轻松实现此目的:

def inc_fun(x):
return x == sorted(x)

当列表有几百或几千个元素长时,使用其他任何东西真的没有什么意义,因为这是最易读和最容易理解的方式。但是,如果您坚持能够在线性时间内做到这一点,则可以使用:

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

或者在一行中相同:

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

 


您现有的代码有两个大问题:

def inc_fun(x):
for i in range(len(x)):
# Using nested loops with a 1d list doesn't make much sense.
for xi in x:
# You return immediately after the first element,
# so you never check more than the first pair.
if x[i] > x[i-1]:
return True
else:
return False

对于 x[i-1] 的第一个评估 (i=0(,你得到 x[-1],等于 9。

当索引为 0 时i是一个问题。

事实上,当你这样做if x[i] > x[i-1]你正在寻找x[0]x[-1],在python中,x[-1]是列表中的最后一项。所以你正在检查 1> 9 是否False

函数中的另一个问题是,您不检查整个列表,但您只检查一次,因为您退出了函数return

最新更新