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

如何改变Python中元组的可比较方法?,python,tuples,Python,Tuples,假设两个元组中都有2个元素 t1=(2,8) t2=(5,6) 假设我想在两个元组的第一个元素的基础上比较这两个元组。 因此,当我们做t1>t2时,输出应该是真的(如t1[1]>t2[1]) 所以我想在第一个元素的基础上对这两个元组进行比较 我知道我必须重写tuple的compare函数。但我不知道怎么做 那么请告诉我怎么做? (假设我想按升序比较元素…) 我想这样做的原因是: 我使用的是Python-3.8.5,您只需获取元组的第一个元素并进行比较 t1=(1,2) t2=(5,4) 打

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

t1=(2,8)

t2=(5,6)
假设我想在两个元组的第一个元素的基础上比较这两个元组。 因此,当我们做
t1>t2
时,输出应该是真的(如t1[1]>t2[1])

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

我知道我必须重写tuple的compare函数。但我不知道怎么做

那么请告诉我怎么做? (假设我想按升序比较元素…)

我想这样做的原因是:


我使用的是
Python-3.8.5
,您只需获取元组的第一个元素并进行比较

t1=(1,2)
t2=(5,4)
打印(t1[0]>t2[0])
或者,如果要筛选或排序

sorted\u tuples=sorted(列出\u tuples,key=lambda x:x[0])

您只需获取元组的第一个元素并进行比较

t1=(1,2)
t2=(5,4)
打印(t1[0]>t2[0])
或者,如果要筛选或排序

sorted\u tuples=sorted(列出\u tuples,key=lambda x:x[0])
这是“优雅”的方式;):

[1]中的
:从functools导入总排序
在[3]中:@total_排序
…:类FirstItemComparisonTuple(元组):
…:定义(自我、其他):
…:返回自我[0]==其他[0]
…:def uu lt uu(自我,其他):
…:返回自我[0]<其他[0]
...: 
在[5]中:a=FirstItemComparisonTuple((1,2))
In[6]:a[0]
Out[6]:1
在[7]中:b=FirstItemComparisonTuple((2,4))
In[8]:a
这是“优雅”的方式;):

[1]中的
:从functools导入总排序
在[3]中:@total_排序
…:类FirstItemComparisonTuple(元组):
…:定义(自我、其他):
…:返回自我[0]==其他[0]
…:def uu lt uu(自我,其他):
…:返回自我[0]<其他[0]
...: 
在[5]中:a=FirstItemComparisonTuple((1,2))
In[6]:a[0]
Out[6]:1
在[7]中:b=FirstItemComparisonTuple((2,4))
In[8]:a
如果元组之间的第一个元素相等,那么“比较大于小于”是什么意思?请再次参阅文章,现在提到了……您想要的已经是内置行为。。。您是否尝试过
t1>t2
?您可以很容易地使用我的答案进行比较,无论您希望它是什么。total_排序使用您提供的eq和lt生成所有其他比较运算符。这是“覆盖”您自己的tuple子类中tuple的compare函数。您所说的comparison大于lower是什么意思?如果两个tuple之间的第一个元素相等呢?请再次参阅文章,现在已经提到了…您想要的已经是内置行为。。。您是否尝试过
t1>t2
?您可以很容易地使用我的答案进行比较,无论您希望它是什么。total_排序使用您提供的eq和lt生成所有其他比较运算符。这是在您自己的tuple子类中“重写”tuple的compare函数。
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