heapq 模块:nlargest()nsmallest()可以完美解决这个问题。

    1. import heapq
    2. nums = [1, 2, 3, 5, -4]
    3. print(heapq.nlargest(3, nums)) # [5, 3, 2]
    4. print(heapq.nsmallest(3, nums)) # [-4, 1, 2]

    两函数能接受一个关键字参数,用于更复杂的数据结构中:

    1. import heapq
    2. stocks = [
    3. {"name": "IBM", "shares": 100, "price": 91.1},
    4. {"name": "AAPL", "shares": 50, "price": 543.2},
    5. {"name": "FB", "shares": 200, "price": 21.09},
    6. {"name": "HPQ", "shares": 35, "price": 31.75},
    7. {"name": "YHOO", "shares": 45, "price": 16.35}
    8. ]
    9. cheaps = heapq.nsmallest(3, stocks, key=lambda s: s["price"]) # 会以prcie的值进行比较
    10. expensives = heapq.nlargest(3, stocks, key=lambda s: s["price"])