La documentación no garantiza eso. ¿Hay algún otro lugar donde esté documentado?
Supongo que podría ser estable ya que se garantiza que el método de ordenación en las listas sea estable (Notas 9º punto: "A partir de Python 2.3, se garantiza que el método de ordenación () es estable"), y ordenado es funcionalmente similar. Sin embargo, no puedo encontrar ninguna fuente definitiva que lo diga.
Propósito: necesito ordenar en función de una clave principal y también una clave secundaria en los casos en que la clave principal es igual en ambos registros. Si se garantiza que sorted () sea estable, puedo ordenar la clave secundaria, luego ordenar la clave principal y obtener el resultado que necesito.
PD: Para evitar confusiones, estoy usando estable en el sentido de "un tipo es estable si garantiza no cambiar el orden relativo de los elementos que se comparan iguales".
fuente
sorted([(1, 2), (1, 1)])
devuelve en[(1, 1), (1, 2)]
lugar de devolver la entrada original en la misma secuencia / orden. ¿No debería la garantía de estabilidad significar que debería devolver la[(1, 2), (1, 1)]
entrada original ? En ese caso, debe ser explícito y decirsorted([(1, 2), (1, 1)], key=lambda t: t[0])
key
parámetro explícitamente.Son estables .
Por cierto: a veces puede ignorar si la ordenación y la ordenación son estables, combinando una ordenación de múltiples pasadas en una de una sola pasada.
Por ejemplo, si desea ordenar los objetos en función de sus
last_name
,first_name
atributos, puede hacerlo en una sola pasada:aprovechando la comparación de tuplas.
Esta respuesta, tal como está, cubre la pregunta original. Para más preguntas relacionadas con la clasificación, está el Procedimiento de clasificación de Python .
fuente
key= lambda item: (-item.rating, item.price)
o proporcione un encmp
lugar de unkey
argumento. Sin embargo, todavía no estoy seguro del propósito de tu comentario.Mientras tanto, la documentación cambió ( compromiso relevante ) y la documentación actual
sorted
lo garantiza explícitamente:Esta parte de la documentación se agregó a Python 2.7 y Python 3.4 (+) por lo que cualquier implementación compatible de esa versión de lenguaje debería tener un archivo
sorted
.Tenga en cuenta que para CPython se
list.sort
ha mantenido estable desde Python 2.3No estoy 100% seguro
sorted
, hoy en día es un uso simplelist.sort
, pero no he revisado el historial para eso. Pero es probable que se use "siempre"list.sort
.fuente
Los documentos de "Novedades" para Python 2.4 señalan efectivamente que sorted () primero crea una lista, luego llama a sort () en ella, proporcionándote la garantía que necesitas aunque no en los documentos "oficiales". También puede verificar la fuente, si está realmente preocupado.
fuente
El documento de Python 3.6 sobre clasificación ahora establece que
Además, en ese documento, hay un enlace al Timsort estable , que establece que
fuente