2024-10-17 21:46:23 发布
网友
我有一门课:
class Point(object): def __init__(self, x, y): self.x = x self.y = y
我创建了上述类点的对象列表,其中包含字段x和{}。在
x
我想找到列表中所有对象的x或y的最大值。例如,从列表[Point(1,3), Point(5,2), Point(8,0)]中,它将是8。在
y
[Point(1,3), Point(5,2), Point(8,0)]
我可以这样做:
在Python中最优雅的方法是什么?在
可以使用vars返回实例属性的字典,然后使用.values方法访问这些值。在
vars
.values
>> class Point(object): ... def __init__(self, x, y): ... self.x = x ... self.y = y ... >>> points = [Point(1,3), Point(5,2), Point(8,0)] >>> max_obj = max(points, key=lambda p: max(vars(p).values())) >>> max_obj.x 8
如果您只对最大值感兴趣,可以执行以下操作:
如果您发现自己经常这样做,那么您可能需要实现类的富比较排序方法和一个实例方法,该方法返回属性的最大值。在
In [7]: import functools In [8]: @functools.total_ordering ...: class Point(object): ...: def __init__(self, x, y): ...: self.x = x ...: self.y = y ...: def max_attr_value(self): ...: return max(vars(self).values()) ...: def __eq__(self, other): ...: return self.max_attr_value() == other.max_attr_value() ...: def __lt__(self, other): ...: return self.max_attr_value() < other.max_attr_value() ...: In [9]: points = [Point(1,3), Point(5,2), Point(8,0)] In [10]: max(points).max_attr_value() Out[10]: 8
您可以将max函数与键一起使用:
max
max_obj = max(your_list, key=lambda p: p.x if p.x > p.y else p.y)
要获得最大值,您可以
或者(正如OP建议的那样)。。。在
max_val = max(max_obj.x, max_obj.y) print(max_val)
虽然您可以像@Coldspeed所说的那样使用max()和key,但从长远来看,我认为一个更好的解决方案是为您的Point类重载小于和大于运算符。这样你只需要实现一次逻辑。如果你要改变逻辑的话,你也要改变它:
max()
key
Point
>>> class Point(object): def __init__(self, x, y): self.x = x self.y = y def __gt__(self, point): return self.x > point.x or self.y > point.y def __lt__(self, point): return self.x < point.x or self.y < point.y >>> points = [Point(1,3), Point(5,2), Point(8,0)] >>> point = max(points) >>> point.x 8 >>>
如果要获得最大值,可以使用一个简单的三元条件:
可以使用
vars
返回实例属性的字典,然后使用.values
方法访问这些值。在如果您只对最大值感兴趣,可以执行以下操作:
^{pr2}$如果您发现自己经常这样做,那么您可能需要实现类的富比较排序方法和一个实例方法,该方法返回属性的最大值。在
您可以将
max
函数与键一起使用:要获得最大值,您可以
^{pr2}$或者(正如OP建议的那样)。。。在
虽然您可以像@Coldspeed所说的那样使用
max()
和key
,但从长远来看,我认为一个更好的解决方案是为您的Point
类重载小于和大于运算符。这样你只需要实现一次逻辑。如果你要改变逻辑的话,你也要改变它:如果要获得最大值,可以使用一个简单的三元条件:
^{pr2}$相关问题 更多 >
编程相关推荐