1

次のようなリストがあるとします。

[(3,4), (4,3), (1,5), (5,1), (2,6), (6,2)]

ここで、x 値が最も小さいタプルと、y 値が最も小さいタプルを返します。

インデックス 0 を使用して (最小) ヒープを構築し、インデックス 1 を使用して別のヒープを構築することは可能ですか? これにより、2 つのヒープが作成されます。

for x: [(1,5), (2,6), (3,4), (4,3), (5,1), (6,2)]
#and
for y: [(5,1), (6,2), (4,3), (3,4), (1,5), (2,6)].

タプルにヒープソートを使用できますか?

4

1 に答える 1

3

答えはイエスです。タプルでヒープソートを使用できます。

ヒープ要素はタプルにすることができます。これは、追跡されているメイン レコードと一緒に比較値 (タスクの優先度など) を割り当てるのに役立ちます...

ただし、ドキュメントにも次のように記載されています。

[nsmallest および nlargest] は、n の値が小さい場合に最適に機能します。値が大きい場合は、sorted() 関数を使用する方が効率的です。また、n==1 の場合は、組み込みの min() および max() 関数を使用する方が効率的です。

つまり、最小の y が必要な場合は、次を使用しますmin

tuple_list = [(3,4), (4,3), (1,5), (5,1), (2,6), (6,2)]

min(tuple_list, key=lambda x: x[1])
# (5,1)

リスト全体を並べ替えたい場合は、次を使用しますsorted

sorted(tuple_list, key=lambda x: x[1])
# [(5,1), (6,2), (4,3), (3,4), (1,5), (2,6)]

一方、3 つの最小値を使用する場合は、次を使用しますheapq.nsmallest

heapq.nsmallest(3, tuple_list, key=lambda x: x[1])
# [(5,1), (6,2), (4,3)]
于 2012-09-30T13:44:44.573 に答える