scores = [9.0, 0.2, 4.0, 0.1, 0.3, 6.0, 0.2, 0.4, 0.1, 0.2] budget = 6 recent_count = 2 positions = list(range(len(scores))) recent = positions[-recent_count:] older = positions[:-recent_count] heavy_hitter_count = budget - recent_count heavy_hitters = sorted( older, key=lambda position: scores[position], reverse=True, )[:heavy_hitter_count] retained = sorted(heavy_hitters + recent) print("heavy hitters:", sorted(heavy_hitters)) print("recent positions:", recent) print("retained positions:", retained) print("cache entries:", len(retained), "of", len(scores)) # Output: """ heavy hitters: [0, 2, 5, 7] recent positions: [8, 9] retained positions: [0, 2, 5, 7, 8, 9] cache entries: 6 of 10 """