Pythonic way to check if a list is sorted or not
Solution 1:
Here is a one liner:
all(l[i] <= l[i+1] for i in range(len(l) - 1))
If using Python 2, use xrange
instead of range
.
For reverse=True
, use >=
instead of <=
.
Solution 2:
I would just use
if sorted(lst) == lst:
# code here
unless it's a very big list in which case you might want to create a custom function.
if you are just going to sort it if it's not sorted, then forget the check and sort it.
lst.sort()
and don't think about it too much.
if you want a custom function, you can do something like
def is_sorted(lst, key=lambda x: x):
for i, el in enumerate(lst[1:]):
if key(el) < key(lst[i]): # i is the index of the previous element
return False
return True
This will be O(n) if the list is already sorted though (and O(n) in a for
loop at that!) so, unless you expect it to be not sorted (and fairly random) most of the time, I would, again, just sort the list.
Solution 3:
This iterator form is 10-15% faster than using integer indexing:
# python2 only
if str is bytes:
from itertools import izip as zip
def is_sorted(l):
return all(a <= b for a, b in zip(l, l[1:]))