繁体   English   中英

递减或递增列表

[英]Decreasing or ascending list

我如何通过这样的列表:
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

检查列表是否已排序也将起作用(如@PasserBy 的答案)。
您还可以使用这样的函数(这个函数也可以按降序处理列表):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM