如何生成一段代码来确定列表是否在Python中排序?
如何编写一个函数,将列表作为参数并验证列表是否已排序 我希望它在排序时返回true,否则返回false。例如:如何生成一段代码来确定列表是否在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
>>> 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