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

时间:2019-12-03 16:02:48

标签: python

我试图编写一个函数,该函数循环遍历列表中的项目,如果该项目大于列表中的上一个项目,则返回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])

返回:False

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

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

这也返回false。

感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

在我看来,您实际上实际上是想检查列表中的数字是从最小到最大的顺序。您可以使用以下方法轻松实现此目标:

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

答案 1 :(得分:1)

对于x [i-1]的第一个评估(i = 0),您将获得x [-1],它等于9。

答案 2 :(得分:1)

您的索引i为0时会出现问题。

实际上,当您执行if x[i] > x[i-1]时,您正在寻找x[0]x[-1],而在Python中,x[-1]是列表的最后一项。因此,您正在检查1> 9是否为False

函数中的另一个问题是,您没有检查整个列表,而是仅检查一次,因为您使用return退出了函数