【问题标题】:How to determine if a list of integers is strictly ascending [duplicate]如何确定整数列表是否严格升序[重复]
【发布时间】:2021-10-30 18:35:13
【问题描述】:

Python 新手,我一直在努力寻找这个解决方案。这是一个学校项目。

问题写这个函数:

def is_ascending(items):

确定项目序列是否严格升序,以便每个元素严格大于(不仅仅是等于)它之前的元素。如果项目列表严格升序,则返回True,否则返回False

请注意,空序列被视为升序,每个单元素序列也是如此,因此请注意您的函数在此问题的这些看似微不足道的边缘情况下返回正确答案。 (如果这些序列不是升序,请告诉我,违反要求并使特定序列不是升序的两个元素是什么?)

我似乎无法让它工作,这是我的代码:

【问题讨论】:

  • 默认情况下您不会返回任何内容 - 如果您的列表只有一项,则跳过内部 for 循环,如果您的列表为空,则跳过外部 for 循环也是。只需在方法的末尾(在两个循环之外)加上return True,就可以了。

标签: python-3.x


【解决方案1】:

之前的帖子中已经清楚地解释了失败。 或者,你也可以试试这个简单的比较:

[注意] 它也非常适合新的需求 - 例如。在这种方法中,降序变化是微不足道的。

def is_ascending(lst: List[int]) -> bool:
    ''' determine if the given list of ints is in strict ascending order'''

    return all(a<b for a,b in zip(lst, lst[1:]))

示例运行:

>>> is_ascending([1, 1, 2, 3, 4])
False
>>> is_ascending([1])
True
>>> is_ascending([])
True
>>> is_ascending([-1, 8, 12, 22, 33])
True

【讨论】:

    【解决方案2】:

    关于您的代码,我们只需要将当前项目与其右侧邻居进行比较。如果该测试通过,在我们比较列表中的所有项目之前不要return,而是在迭代之后只continue,直到我们到达所有项目的末尾:

    def is_ascending(items):
        for index, item in enumerate(items):
            try:
                if items[index+1] > item:
                    continue
                else:
                    return False
            except IndexError:
                break
        return True
    

    并使用ritem &gt; item,因为它正在测试“升序”。


    否则,(这是重复的)Python - How to check list monotonicity 中回答的更好更简洁的解决方案:

    def is_ascending(items):
        return all(x<y for x, y in zip(items, items[1:]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2017-12-23
      相关资源
      最近更新 更多