降序或升序列表



如何浏览这样的列表:
list = [0, 1, 8 , 10, 14, 16]

观察第一项是否小于或等于下一项,依此类推。

如果为真,返回True,如果不为真,返回False

非常感谢。

您似乎想测试列表是否已排序。

def is_sorted(seq):
return seq == sorted(seq)

您可以这样做(对于列表x-最好不要将列表命名为list):

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

的好处是,一旦结果为False,它就会停止比较。

例子:

>>> x = [0, 1, 8, 10, 14, 16]
>>> all(x[i] <= x[i+1] for i in range(len(x)-1))
True
>>> x = [0, 1, 8, 10, 17, 16]
>>> all(x[i] <= x[i+1] for i in range(len(x)-1))
False

可以这样使用函数:

listA = [0, 1, 8 , 10, 14, 16]
listB = [16, 14, 10 , 8, 1, 0]

def isAscending(input):
j = float('-inf')
for i in input:
if i<j : 
return False
j = i
return True

def isDescending(input):
j = float('inf')
for i in input:
if i>j : 
return False
j = i
return True

print(isAscending(listA))  # -> True
print(isDescending(listA)) # -> False
print(isAscending(listB))  # -> False
print(isDescending(listB)) # -> True

检查列表是否按排序也将工作(在@路人的回答)。
你也可以使用这样的函数(这个函数也处理按降序排列的列表):

def isValid(input):
return input == sorted(input) or input == sorted(input , reverse = True)

print(isValid(listA)) # -> True
print(isValid(listB)) # -> True

如果您想知道两个连续的项是否按递增顺序排列,您可以将它们与zip配对,然后进行比较。

new_list = [0, 1, 8 , 3, 10, 14, 16, 12]
is_pairwise_ascending_order = [i <= j for i, j in zip(new_list[:-1], new_list[1:])]
print(is_pairwise_ascending_order)

输出
[True, True, False, True, True, True, False]

最后,要检查列表是否按升序排列,您可以使用all内置函数(如在另一个解决方案中所做的)或False not in is_pairwise_ascending_order