如何浏览这样的列表: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