我有一个Point对象的列表,每个对象都有一个x和y属性。我希望在不迭代两次的情况下计算maximum_x和maximum_y。我可以这样做:
max_x = max(points, key=lambda p: p.x)
max_y = max(points, key=lambda p: p.y)
但是,这当然会重复两次。我可以手动完成,但是由于找到最大值非常简单,因此我担心它会增加混乱。内置的max
函数有什么办法做到这一点?
答案 0 :(得分:8)
不,不是。最好的方法就是打电话两次,max
。
无论如何,这样想:无论是在一次迭代中进行一次迭代并进行两次比较,还是在迭代过程中进行两次迭代并进行一次比较,最终并没有多大区别。
答案 1 :(得分:2)
假设x
和y
位于一个二维数组中,可以使用numpy来实现:
import numpy as np
points_array = np.array([(p.x,p.y) for p in points])
xmax, ymax = points_array.max(axis=0)
但这意味着您将不得不重组数据。话虽如此,如果那是您需要numpy的唯一原因,我想我会坚持下去。