def nsmallest(n, a): h = [] for e in a[:n]: heapq.heappush(h, -e) # we use a max heap but push -1 * e for e in a[n:]: heapq.heappushpop(h, -e) return -heapq.heappop(h)