![](/img/trans.png)
[英]python:find a ascending/decreasing elements in a list without using loop
[英]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.