Python 3 while循环没有完全循环吗?

4 浏览
0 Comments

Python 3 while循环没有完全循环吗?

我已经做了一段时间了。我试图创建一个函数,检查列表中的数字是否递增。例如,[1, 2, 3] 是 True,但 [1, 3, 2] 是 False。我已经达到了这样的程度:它会判断 [1, 2, 3] 是 True,[3, 2, 1] 是 False,但 [1, 3, 2] 仍然是 True。我猜这只是因为只有前两个位置被读取了吗?

以下是参考的函数:

 def increasing(lst):
    index = 0
    index2 = index + 1
    while index < len(lst):
        if lst[index] >= lst[index2]:
            index += 1
            index2 += 1
            return False
        else:
            while index < len(lst):
                if lst[index] < lst[index2]:
                    index += 1
                    index2 += 1
                    return True

0
0 Comments

问题的原因是代码过于复杂,而解决方法是使用一个循环来检查第i个元素是否大于(i-1)个元素。

以下是简化后的代码:

def isSorted(l):
    i = 1
    while i < len(l):
        if l[i] < l[i-1]:
            return False
        i += 1
    return True
isSorted([1, 2, 3]) #True
isSorted([1, 3, 2]) #False

另一个答案中的lst == sorted(lst)虽然在技术上是正确的,但如果输入列表没有排序,它会对其进行排序并创建一个新的排序列表。而这种方法在检测到一个值不符合顺序时会提前结束循环。所以尽管看起来不太Pythonic,但我认为这种解决方案在处理大型列表时性能更高。

0
0 Comments

问题的出现原因:

在给定的代码中,函数increasing(lst)用于检查一个列表是否已经排序。然而,这种方法比线性遍历列表的方法要慢,因为它需要对列表进行排序,时间复杂度为O(n log(n))。所以,对于大多数情况来说,这种方法可能是可以接受的。

解决方法:

如果想要更快地检查一个列表是否已经排序,可以使用线性遍历的方法。以下是一个使用while循环来实现线性遍历的示例代码:

def increasing(lst):
    i = 0
    while i < len(lst) - 1:
        if lst[i] > lst[i + 1]:
            return False
        i += 1
    return True

这个函数会逐个比较相邻的元素,如果发现前一个元素大于后一个元素,则返回False,表示列表没有排序。如果遍历完整个列表都没有发现不符合排序要求的情况,则返回True,表示列表已经排序。

通过使用这种线性遍历的方法,可以更快地检查一个列表是否已经排序,而不需要对列表进行排序操作。

0