如何判断列表是否按升序排列?(How do I tell if a list is in ascending order? Just needs to return True or False)
我有它的方式它检查前两个数字是否上升后停止。
在检查完整个列表之前,如何让它继续运行?
def isAscending(xs): for n in range(len(xs) + 1): if xs[n] > xs[n+1]: return False else: if xs[n] < xs[n+1]: return TrueThe way I have it it stops after checking if the first two digits are ascending.
How do I make it keep running until it has checked the whole list?
def isAscending(xs): for n in range(len(xs) + 1): if xs[n] > xs[n+1]: return False else: if xs[n] < xs[n+1]: return True最满意答案
仅在结尾处返回True ,即在检查每个元素之后。 使用最少的更改修复代码:
def isAscending(xs): for n in range(len(xs) - 1): if xs[n] > xs[n+1]: return False return True print isAscending([1,2,3,4]) # True print isAscending([1,2,4,3]) # False简短解决方案
>>> lst = [1,2,3,4] >>> sorted(lst) == lst True >>> lst = [1,2,4,3] >>> sorted(lst) == lst False在O(n)中运行的更好的简短解决方案(排序为O(n log n)):
>>> lst = [1,2,3,4] >>> all(x <= y for x,y in zip(lst, lst[1:])) True >>> lst = [1,2,4,3] >>> all(x <= y for x,y in zip(lst, lst[1:])) False为了使最后一个内存更有效,如果您使用的是Python 2,请使用itertools.izip代替zip 。
Only return True at the end, that is after every element has been checked. Fixing your code with minimal changes:
def isAscending(xs): for n in range(len(xs) - 1): if xs[n] > xs[n+1]: return False return True print isAscending([1,2,3,4]) # True print isAscending([1,2,4,3]) # FalseShort solution:
>>> lst = [1,2,3,4] >>> sorted(lst) == lst True >>> lst = [1,2,4,3] >>> sorted(lst) == lst FalseBetter short solution that runs in O(n) (sorting is O(n log n)):
>>> lst = [1,2,3,4] >>> all(x <= y for x,y in zip(lst, lst[1:])) True >>> lst = [1,2,4,3] >>> all(x <= y for x,y in zip(lst, lst[1:])) FalseTo make the last one more memory efficient, use itertools.izip in place of zip if you are using Python 2.
更多推荐
发布评论