我有一个类对象my_rectangle的列表:
class my_rectangle:
def __init__(self,text,x_start,y_start,x_end,y_end):
self.text=text
self.x_start=x_start
self.y_start=y_start
self.x_end=x_end
self.y_end=y_end
self.x_centroid=(self.x_start+self.x_end)/2
self.y_centroid=(self.y_start+self.y_end)/2
使用给出质心坐标的类属性(x_centroid
和y_centroid
),我想使用从左到右然后从上到下的顺序对列表进行排序(正常的英语阅读顺序)?
说我有
A=my_rectangle('Hi,',1,3,2,4)
B=my_rectangle('Im',3,3,3,4)
C=my_rectangle('New',1,1,2,2)
my_list=[C,B,A]
我想命令它获得:
my_sorted_list=[A,B,C]
这是文本的表示形式
""" Hi, I'm
New
"""
答案 0 :(得分:3)
生成排序列表是内置函数sorted()
的特色。
使用多个值进行排序可以通过提供key
函数来完成,该键函数将值作为元组返回。然后,根据元组的字典顺序对结果列表进行排序。
#UNTESTED
my_sorted_list = sorted(my_list, key=lambda item: (item.x_centroid, item.y_centroid))
答案 1 :(得分:1)
您可以通过定义Parse error: syntax error, unexpected '[', expecting ']'
方法使自定义类可排序。这样可以照顾到$nodo_name=array(
"34213897"=>"$n1_name",
}
$con->query("UPDATE test SET nodo='$nodo_name[$upchannel[$i]]' WHERE id='$i'");
运算符,该运算符用于默认排序。
__lt__
我将<
定义为属性,以便在初始化Rectangle后更改其他坐标时它将更新。
如果使用问题中的数据,则将获得此输出。
class Rectangle:
def __init__(self,text,x_start,y_start,x_end,y_end):
self.text=text
self.x_start=x_start
self.y_start=y_start
self.x_end=x_end
self.y_end=y_end
@property
def centroid(self):
return (self.x_start+self.x_end)/2, (self.y_start+self.y_end)/2
def __lt__(self, other):
"""Using "reading order" in a coordinate system where 0,0 is bottom left"""
try:
x0, y0 = self.centroid
x1, y1 = other.centroid
return (-y0, x0) < (-y1, x1)
except AttributeError:
return NotImplemented
def __repr__(self):
return 'Rectangle: ' + self.text