【问题标题】:How to create a for loop, which returns True if the list's numbers are in order and otherwise False? [duplicate]如何创建一个for循环,如果列表的数字有序则返回True,否则返回False? [复制]
【发布时间】:2020-03-28 08:50:57
【问题描述】:

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

感谢您的帮助:)

【问题讨论】:

  • 哪一项比列表中的前一项大?您将返回第一次检查,因此函数退出。不会有比第一个更多的检查了。此外,您在列表中进行了不必要的迭代两次。第二个 for 循环是多余的,你永远不会对 xi 变量做任何事情。
  • 所以基本上你想检查数字是否按从小到大的顺序排列?
  • 第一个xi 将返回TrueFalse。不会评估 xi 的其他值。

标签: python


【解决方案1】:

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

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:x 开始的 x 范围来做到这一点(避免 x[0] 上的 i-1 错误),所以它可以用
  • @ScientistStats 您可以从1 开始您的范围:def inc_fun(x): for i in range(1, len(x)): if x[i] &gt; x[i - 1]: return False return True
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您的索引i 为 0 时有问题。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2018-10-22
      相关资源
      最近更新 更多