Tengo una lista de longitud n.

Quiero encontrar los índices que contienen los 5 valores mínimos de esta lista.

Sé cómo encontrar el índice que contiene el valor mínimo usando operator

min_index,min_value = min(enumerate(list), key=operator.itemgetter(1))

¿Se puede modificar este código para obtener una lista de los 5 índices que busco?

2
Mongzyy 11 may. 2016 a las 15:06

3 respuestas

La mejor respuesta

Aunque esto requiere ordenar la lista completa, puede obtener una porción de la lista sorted:

data = sorted(enumerate(list), key=operator.itemgetter(1))[:5]
1
Tadhg McDonald-Jensen 11 may. 2016 a las 12:23

¿Qué tal algo como esto?

    map(lambda x: [a.index(x),x],sorted(list)[:5])

Eso devolverá una lista de listas donde list [x] [0] = el índice y list [x] [1] = el valor

Editar:

Esto supone que la lista no tiene valores mínimos repetidos. Como adhg McDonald-Jensen señaló, esto solo devolverá la primera instancia del valor dado.

1
stackunderflow 11 may. 2016 a las 12:51

Si usa el paquete heapq, puede hacerlo por nsamllest:

heapq.nsmallest(5, enumerate(list), key=operator.itemgetter(1))
1
Hooting 11 may. 2016 a las 12:51