加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 有没有办法在列表项的类中覆盖list.max()和list.sort(

发布时间:2020-12-20 11:20:42 所属栏目:Python 来源:网络整理
导读:我有一个超类的多个子类,它们在instance_of_a_class.value中存储一些东西,我重写__cmp __()以提供合理的==,,比较. 但是,我在我的代码中有多个位置 min(list_of_instances_of_class,key = lambda _:_. value)或max(list_of_instances_of_class,key = lambda
我有一个超类的多个子类,它们在instance_of_a_class.value中存储一些东西,我重写__cmp __()以提供合理的==,<,>比较.

但是,我在我的代码中有多个位置

min(list_of_instances_of_class,key = lambda _:_. value)或max(list_of_instances_of_class,key = lambda _:_. value)和偶尔排序(…

是否有一个函数要在类中重写,这样我就不必为每个对所述函数的调用指定键函数,或者我是否需要子类列表并覆盖max,min和sorted方法?

解决方法

只需实现__lt__:

class Obj(object):
    def __init__(self,value):
        self.value = value
    def __lt__(self,other):
        return self.value < other.value
    def __repr__(self):
        return 'Obj(%r)' % self.value

obj_list = [Obj(2),Obj(1),Obj(4),Obj(3)]

print max(obj_list)
print min(obj_list)
print sorted(obj_list)

不推荐使用__cmp__,并且您提到的所有函数仅使用__lt__而不使用其他比较.

如果由于某种原因你真的不能用这种方式比较,你可以这样做:

from operator import attrgetter
from functools import partial

valget = attrgetter('value')

maxval = partial(max,key=valget)
minval = partial(max,key=valget)
sortedval = partial(sorted,key=valget)
sortval = partial(list.sort,key=valget)

你把它们称为maxval(obj_list)而不是max(obj_list)等,而sortval(obj_list)就地排序而不是obj_list.sort()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读