Модуль heapq

Введение

Примеры

  • 1

    Самые большие и маленькие предметы в коллекции

    Для того, чтобы найти самые большие предметы в коллекции, heapq модуль имеет функцию под названием nlargest , мы передаем его два аргумента, то первый из них является количество элементов , которые мы хотим получить, второй это имя коллекции:

     import heapq
    
    
    numbers = [1, 4, 2, 100, 20, 50, 32, 200, 150, 8]
    print(heapq.nlargest(4, numbers))  # [200, 150, 100, 50]
    
     

    Точно так же, чтобы найти самые маленькие предметы в коллекции, мы используем nsmallest функции:

     print(heapq.nsmallest(4, numbers))  # [1, 2, 4, 8]
    
     

    Оба nlargest и nsmallest функции принимает необязательный аргумент (ключевой параметр) для сложных структур данных. В следующем примере показано использование age имущества для получения самых старых и самых молодых из people словарю:

     people = [
        {'firstname': 'John', 'lastname': 'Doe', 'age': 30},
        {'firstname': 'Jane', 'lastname': 'Doe', 'age': 25},
        {'firstname': 'Janie', 'lastname': 'Doe', 'age': 10},
        {'firstname': 'Jane', 'lastname': 'Roe', 'age': 22},
        {'firstname': 'Johnny', 'lastname': 'Doe', 'age': 12},
        {'firstname': 'John', 'lastname': 'Roe', 'age': 45}
    ]
    
    oldest = heapq.nlargest(2, people, key=lambda s: s['age'])
    print(oldest)
    # Output: [{'firstname': 'John', 'age': 45, 'lastname': 'Roe'}, {'firstname': 'John', 'age': 30, 'lastname': 'Doe'}]
    
    youngest = heapq.nsmallest(2, people, key=lambda s: s['age'])
    print(youngest)
    # Output: [{'firstname': 'Janie', 'age': 10, 'lastname': 'Doe'}, {'firstname': 'Johnny', 'age': 12, 'lastname': 'Doe'}] 
  • 1

    Самый маленький предмет в коллекции

    Самое интересное свойство heap является то , что его наименьший элемент всегда первый элемент: heap[0]

     import heapq
    
    
    numbers = [10, 4, 2, 100, 20, 50, 32, 200, 150, 8]
    
    heapq.heapify(numbers)
    print(numbers)
    # Output: [2, 4, 10, 100, 8, 50, 32, 200, 150, 20]
    
    heapq.heappop(numbers)  # 2
    print(numbers)
    # Output: [4, 8, 10, 100, 20, 50, 32, 200, 150]
    
    heapq.heappop(numbers)  # 4
    print(numbers)
    # Output:  [8, 20, 10, 100, 150, 50, 32, 200] 

Синтаксис

Параметры

Примечания