如何生成一段代码来确定列表是否在Python中排序?

如何生成一段代码来确定列表是否在Python中排序?,python,list,sorting,Python,List,Sorting,如何编写一个函数,将列表作为参数并验证列表是否已排序 我希望它在排序时返回true,否则返回false。例如: >>> is_sorted([1, 5, 8, 10]) True >>> is_sorted([4, 1, 7, 8]) False 但是,我完全不知道如何处理任何类型的列表,一个明显的方法是对其进行排序,并与原始列表进行平等性比较: #!/usr/bin/env python def is_sorted(mylist): test

如何编写一个函数,将列表作为参数并验证列表是否已排序

我希望它在排序时返回true,否则返回false。例如:

>>> is_sorted([1, 5, 8, 10]) 
True

>>> is_sorted([4, 1, 7, 8])
False

但是,我完全不知道如何处理任何类型的列表,一个明显的方法是对其进行排序,并与原始列表进行平等性比较:

#!/usr/bin/env python

def is_sorted(mylist):
    testlist = sorted(mylist[:])
    return testlist == mylist

print is_sorted([1, 4, 6, 7])
print is_sorted([1, 7, 6, 5])
产出:

paul@horus:~/src/sandbox$ ./sorted.py
True
False
paul@horus:~/src/sandbox$ 
如果您想要更高效的东西(假设您想要检查它是否按升序排序):

def已排序(mylist):
最后一项=我的列表[0]
对于mylist中的项目:
如果项目<最后一项:
返回错误
最后一项=项目
返回真值
这应该是一个O(n)解决方案,通过迭代列表来检查无序的值。O(n)是最坏的情况,因为它返回false它发现的第一个无序元素

#!/usr/bin/env python

def is_sorted(mylist):
    for i, val in enumerate(mylist):
        if (i > 0 and mylist[i] < mylist[i-1]):
            return False
    return True

print is_sorted([1, 4, 6, 7])
print is_sorted([1, 7, 6, 5])

获得O(n)性能的最简单版本:

def is_sorted(lst):
    return all(a <= b for a,b in zip(lst, lst[1:]))
def已排序(lst):

返回全部(a以下是最简单的方法:

def is_sorted(l):
    return True if l == sorted(l) else False

你想要什么语言的功能?请告诉我们你尝试了什么。是否有任何性能或空间要求。这一切都取决于列表的大小,类型的list@JasonW我正在使用Pythonduplicate:是的,这是最简单的方法。同样慢:O(n logn)而不是O(n).我建议使用
izip
itertools
中的
islice
def is_sorted(mylist):
    return False not in [sorted(mylist)[idx] == val for idx, val in enumerate(mylist)]

>>> is_sorted([1, 2, 3, 4])
True

>>> is_sorted([1, 2, 4, 3])
False
def is_sorted(lst):
    return all(a <= b for a,b in zip(lst, lst[1:]))
def is_sorted(l):
    return True if l == sorted(l) else False