Manera pitónica de verificar si una lista está ordenada o no
¿Existe una forma pitónica de comprobar si una lista ya está ordenada ASC
oDESC
listtimestamps = [1, 2, 3, 5, 6, 7]
algo así isttimestamps.isSorted()
regresa True
o False
.
Quiero ingresar una lista de marcas de tiempo para algunos mensajes y verificar si las transacciones aparecieron en el orden correcto.
Aquí hay una sola línea:
all(l[i] <= l[i+1] for i in range(len(l) - 1))
Si usa Python 2, use xrange
en lugar de range
.
Para reverse=True
, utilice >=
en lugar de <=
.
yo solo usaría
if sorted(lst) == lst:
# code here
a menos que sea una lista muy grande, en cuyo caso es posible que desee crear una función personalizada.
Si simplemente va a ordenarlo, si no está ordenado, olvídese del cheque y ordénelo.
lst.sort()
y no lo pienses demasiado.
Si quieres una función personalizada, puedes hacer algo como
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
Sin embargo, esto será O (n) si la lista ya está ordenada (¡y O (n) en un for
bucle!), Por lo tanto, a menos que espere que no esté ordenada (y sea bastante aleatoria) la mayor parte del tiempo, yo lo haría, Nuevamente, simplemente ordene la lista.