gpt4 book ai didi

python - 用于比较的自定义 __lt__ 方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:16 25 4
gpt4 key购买 nike

我希望能够按一个属性对类列表进行排序,而该属性恰好是另一个类 Date。我做了一些研究,想使用 sorted(list, key=lambda x:date) 排序方法,但看到 date 本身就是一个类,我怎么能写一个 __lt__ 日期函数允许我按时间顺序排序?

我想要的是:

if self.year!= other.year:
return self.year < other.year
elif self.month != pther.month
...

等等。

这是我的日期类:

class Date:
def __init__(self, month, day, year, minute, hour, string):
self.month = month
self.day = day
self.year = year
self.minute = minute
self.hour = hour
self.string = string

我应该提一下,这是我第一次使用 Python,所以我不太擅长这个。

提前致谢!

最佳答案

比较两个复杂数据结构的简单方法是以正确的排序顺序比较它们属性的元组。试试这个:

class Date:
def __init__(self, month, day, year, minute, hour, string):
self.month = month
self.day = day
self.year = year
self.minute = minute
self.hour = hour
self.string = string
def __lt__(self, other):
return (self.year, self.month, self.day, self.hour, self.minute) < \
(other.year, other.month, other.day, other.hour, other.minute)

assert Date(4, 15, 2016, 30, 12, '') < \
Date(4, 16, 2016, 0, 0, '') < \
Date (1, 1, 2017, 59, 23, '')

assert not (Date(4, 16, 2016, 0, 0, '') < Date(4, 15, 2016, 30, 12, ''))

当然,这只实现了< .根据代码的性质,您可能希望实现所有其他比较函数,> , == , !=等。一种方便的方法是使用 @functools.total_ordering 类装饰器。

引用:

关于python - 用于比较的自定义 __lt__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42309608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com