Manera pitónica de verificar si una lista está ordenada o no

Resuelto anijhaw asked hace 14 años • 27 respuestas

¿Existe una forma pitónica de comprobar si una lista ya está ordenada ASCoDESC

listtimestamps = [1, 2, 3, 5, 6, 7]

algo así isttimestamps.isSorted()regresa Trueo False.

Quiero ingresar una lista de marcas de tiempo para algunos mensajes y verificar si las transacciones aparecieron en el orden correcto.

anijhaw avatar Sep 21 '10 03:09 anijhaw
Aceptado

Aquí hay una sola línea:

all(l[i] <= l[i+1] for i in range(len(l) - 1))

Si usa Python 2, use xrangeen lugar de range.

Para reverse=True, utilice >=en lugar de <=.

Wai Yip Tung avatar Sep 20 '2010 20:09 Wai Yip Tung

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 forbucle!), 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.

aaronasterling avatar Sep 20 '2010 20:09 aaronasterling