Python Language
ヒープック
サーチ…
コレクション内の最大値と最小値
コレクションの中で最大のアイテムを見つけるために、 heapq
モジュールにはheapq
という関数がありますnlargest
つの引数を渡します。最初のものは取得したいアイテムの数、もう1つはコレクション名です。
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'}]
コレクション内の最小アイテム
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]
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow