ヒープを生成するためにheapqモジュールを使用する際に、真の値の代わりにタプルを使用できることを理解しています。タプルを使用する場合のPythonのヒープ比較のオーバーライド
また、heapqモジュールの比較演算子__lt__
をオーバーライドして、ヒープの作成と保守で独自の比較を行うこともできます。
この演算子をオーバーライドしてタプルの両方の値を比較する方法はありますか?例えば、私は最初の線に沿って何かと等しい場合は、タプルの第二の値を比較heapq持ってしようとしています:
ロジックがあることであると後半other[1] < self[1]
は意図的に逆転され
def __lt__(self, other):
return self[0] < other[0] if self[0] != other[0] else other[1] < self[1]
より大きな第2の値を有するタプルは、その2つのうち小さい方であると考えられるべきである。
事前の洞察に感謝します。
編集:私は、オーバーロードとオーバーライドの用語を混同していると思います。上書きは私が言及していたものでした。
@Ellestカスタムクラスは、特定のオーバーロードされた演算子を実装する最も単純で最もPythonの方法です。あなたは 'def __lt __(self、other):'はどのクラスの演算子にもグローバルにオーバーロードされないので、おそらく動作しません。また、組み込み型のパッチを作るのは不可能です。構文的には正しいものの、論理的に間違っており、最適な解決策はカスタムクラスです。 –