提问者:小点点

如何改变Python中元组的可比方法?


假设两个元组中都有2个元素。

t1=(2,8)

t2=(5,6)

假设我想在它们的第一个元素的基础上比较两个元组。所以,当我们做t1

所以我想在第一个元素的基础上对这两个元组进行比较。

我知道我必须覆盖元组的比较函数。但是我不知道怎么做。

所以请告诉我如何才能做到这一点?(假设我想按升序比较元素…)

我想这样做的原因是:在python3中使用heapq模块合并k个排序列表

我正在使用Python-3.8.5


共2个答案

匿名用户

您可以简单地获取元组的第一个元素并进行比较。

t1 = (1,2)
t2 = (5,4)
print(t1[0] > t2[0])

或者如果您想过滤或排序。

sorted_tuples = sorted(list_of_tuples, key= lambda x: x[0])

匿名用户

这是“优雅”的方式;):

In [1]: from functools import total_ordering


In [3]: @total_ordering
   ...: class FirstItemComparisonTuple(tuple):
   ...:     def __eq__(self, other):
   ...:         return self[0] == other[0]
   ...:     def __lt__(self, other):
   ...:         return self[0] < other[0]
   ...: 


In [5]: a = FirstItemComparisonTuple((1, 2))

In [6]: a[0]
Out[6]: 1

In [7]: b = FirstItemComparisonTuple((2, 4))

In [8]: a < b
Out[8]: True