gpt4 book ai didi

Python:排序时处理异常

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

我有一个对象列表,需要根据 key function 排序.问题是在对列表进行排序时,列表中的某些元素可能会“过时”。当在这样一个过期的项目上调用键函数时,它会失败并出现异常。

理想情况下,我想要一种使用键函数对列表进行排序的方法,这样当在元素上调用键函数时发生错误时,该元素将被排除在排序结果之外。

可以使用以下示例重构我的问题:假设我有两个类,GoodBad:

class Good(object):
def __init__(self, x):
self.x = x
def __repr__(self):
return 'Good(%r)' % self.x

class Bad(object):
@property
def x(self):
raise RuntimeError()
def __repr__(self):
return 'Bad'

我想根据它们的 x 属性对这些类的实例进行排序。例如:

>>> sorted([Good(5), Good(3), Good(7)], key=lambda obj: obj.x)
[Good(3), Good(5), Good(7)]

现在,当我的列表中有一个 Bad 时,排序失败:

>>> sorted([Good(5), Good(3), Bad()], key=lambda obj: obj.x)
... RuntimeError

我正在寻找一个神奇的函数 func,它根据关键函数对列表进行排序,但只是忽略关键函数引发错误的元素:

>>> func([Good(5), Good(3), Bad()], key=lambda obj: obj.x)
[Good(3), Good(5)]

实现此目标的最 Pythonic 方式是什么?

最佳答案

我知道的每种排序算法都不会因为某些值已过时或其他原因而丢弃某些值。排序算法的任务是对列表进行排序,并快速排序,其他一切都是无关紧要的具体任务。
所以,我会自己写这个神奇的功能。它会分两步进行排序:首先它会过滤列表,只留下 Good 值,然后对结果列表进行排序。

关于Python:排序时处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20078739/

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