기본적으로 (키, 값) 쌍을 포함하는 힙을 생성하기 위해 heapq 모듈을 사용할 때 직선 값 대신 튜플을 사용할 수 있다는 것을 알고 있습니다.파이썬은 튜플을 사용할 때 heapq 비교를 오버라이드합니다.
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]
더 큰 두 번째 값을 갖는 튜플은 두 개보다 작은 것으로 간주되어야합니다.
미리 감사드립니다.
편집 : 나는 오버로드와 오버라이드 사이의 용어를 혼란스럽게 생각합니다. 무시는 제가 언급 한 것입니다.
@Ellest 사용자 정의 클래스는 특정 오버로드 된 연산자를 구현하는 가장 단순하고 가장 Python적인 방법입니다. 'def __lt __ (self, other) :'전역 적으로 어떤 클래스에서든 연산자에 과부하가 걸리지 않으므로 아마 접근하지 못할 것입니다. 또한 내장형을 원숭이 패치하는 것은 불가능합니다. 따라서 문법적으로 올바르지 만 논리적으로 부정확하며 최상의 솔루션은 맞춤 클래스입니다. –