Escribí un compiler cache for MSVC (muy parecido a ccache para gcc). Una de las cosas que tengo que hacer es eliminar los archivos de objeto más antiguos en mi directorio de caché para recortar el caché a un tamaño definido por el usuario.¿Cómo puedo ordenar parcialmente una lista de Python?
En este momento, básicamente, tienen una lista de tuplas, cada una de las cuales es la última vez que el acceso y el tamaño de archivo:
# First tuple element is the access time, second tuple element is file size
items = [ (1, 42341),
(3, 22),
(0, 3234),
(2, 42342),
(4, 123) ]
Ahora me gustaría hacer un parcial de tipo en esta lista de modo que los primeros N elementos están ordenados (donde N es la cantidad de elementos para que la suma de sus tamaños supere los 45000). El resultado debe ser básicamente el siguiente:
# Partially sorted list; only first two elements are sorted because the sum of
# their second field is larger than 45000.
items = [ (0, 3234),
(1, 42341),
(3, 22),
(2, 42342),
(4, 123) ]
Realmente no importa el orden de las entradas no ordenados, sólo necesito los artículos N más antiguos de la lista cuyo tamaño acumulado excede un cierto valor.
¿Es un problema si está todo ordenado? ¿O acabas de salir para mantener las cosas rápido? – Ishpeck
@Ishpeck: solo trato de mantener las cosas rápido. Actualmente es lo suficientemente rápido, pero la lista podría ser mucho más grande que la que tengo aquí; Estoy investigando el potencial para la optimización en caso de que el futuro lo requiera. –