¿Encontrar el número n más pequeño en una lista?

Necesito una forma eficiente de obtener el número n más pequeño Y su índice en una lista que contiene hasta 15000 entradas (por lo que la velocidad no es muy importante).

Lamentablemente no puedo usar numpy o cualquier otra biblioteca no estándar.

Estoy usando Python 2.7

use heapq.nsmallest (y enumerate para obtener el índice):

 nums = [random.randint(1,1000000) for _ in range(10000)] import heapq import operator heapq.nsmallest(10,enumerate(nums),key=operator.itemgetter(1)) Out[26]: [(5544, 35), (1702, 43), (6547, 227), (1540, 253), (4919, 360), (7993, 445), (1608, 495), (5832, 505), (1388, 716), (5103, 814)] 

Use enumerate para almacenar la posición original, luego ordene por el valor:

 original_list = [36, 44, 23, 24, 47, 19, 49, 36, 30, 3] sorted_lookup = sorted(enumerate(original_list), key=lambda i:i[1]) position, value = sorted_lookup[4] # 4 is my "n" 

sorted_lookup en mi ejemplo es:

 [(9, 3), (5, 19), (2, 23), (3, 24), (8, 30), (0, 36), (7, 36), (1, 44), (4, 47), (6, 49)] 

Y la position es 8 , el value es 30