Python はタプルを辞書順でソートします:
最初に最初の 2 つの項目が比較され、それらが異なる場合は、比較の結果が決定されます。それらが等しい場合は、次の 2 つの項目が比較され、いずれかのシーケンスが使い果たされるまで続きます。
たとえば、
In [33]: import heapq
In [34]: A = [(1,100,2)]
In [35]: B = [(2,0,0)]
In [40]: list(heapq.merge(A,B))
Out[40]: [(1, 100, 2), (2, 0, 0)]
In [41]: (1, 100, 2) < (2, 0, 0)
Out[41]: True
したがって、それは必ずしも真実ではありません
a >= x and b >= y and c >= z
heapq
カスタム クラスのインスタンスを含む、注文可能なオブジェクトの任意のコレクションで使用できます。カスタム クラスを使用すると、任意の種類の順序付け規則を調整できます。例えば、
class MyTuple(tuple):
def __lt__(self, other):
return all(a < b for a, b in zip(self, other))
def __eq__(self, other):
return (len(self) == len(other)
and all(a == b for a, b in zip(self, other)))
def __gt__(self, other):
return not (self < other or self == other)
def __le__(self, other):
return self < other or self == other
def __ge__(self, other):
return not self < other
A = [MyTuple((1,100,2))]
B = [MyTuple((2,0,0))]
print(list(heapq.merge(A,B)))
# [(2, 0, 0), (1, 100, 2)]
ただし、これにより<
forの概念が変わりますMyTuple
が、 によって返される結果heapq.merge
が満たされるとは限りません。
a <= x and b <= y and c <= z
これを行うには、最初にA
とからB
相互に順序付けできないすべてのアイテムを削除する必要があります。