Python包含用于min-sheaps的heapq模块,但我需要一个最大堆.我应该在Python中使用什么来实现max-heap实现?
我希望拥有一堆物品,而不仅仅是数字.它们将具有一个整数属性,堆可以按其排序.在python中使用堆的最简单方法是heapq,但是在使用heapq时如何告诉它按特定属性排序?
我想通过定义自定义比较函数将一组对象存储在最小堆中.我看到有一个heapq模块可用作python发行版的一部分.有没有办法在这个模块上使用自定义比较器?如果没有,是否有其他人建立了自定义最小堆?
我有一个Shapely多边形列表和一个像这样的点:
from shapely.geometry import Point, Polygon
polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
Run Code Online (Sandbox Code Playgroud)
我想在列表中找到最接近该点的多边形。我已经知道object.distance(other)返回两个几何形状之间的最小距离的函数,我想过计算循环中的所有距离以找到最近的多边形:
polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
min_dist = 10000
closest_polygon = None
for polygon in polygons:
dist = polygon.distance(point)
if dist < min_dist:
min_dist = dist
closest_polygon = polygon
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有更有效的方法来做到这一点?
我从客户端接收服务器对象(每个对象具有相同的结构,并具有字段self.utc_time,其中包含创建该对象的时间).我需要存储在一些结构中所以我总是按升序排序所以当我弹出时,我通过utc_time弹出最旧的对象,而不是我收到的时间.我想从heapq中使用优先级队列,但是如何通过自定义对象的utc_time字段来说明heaify?有更好的解决方案吗?
假设我有一个类似的嵌套列表:
nested_list=[[123,'Aaron','CA'],[124,'Bob','WY'],[125,'John','TX']]
insert_me=[122,'George','AL']
Run Code Online (Sandbox Code Playgroud)
该列表当前按每个子列表的中间值排序(按字母顺序),我想在嵌套列表中的正确位置添加值insert_me。为了保持字母顺序,需要在列表之间添加“ Bob”和“ John”的列表。我知道bisect通常将用于带有列表的此类任务,但不了解如何将bisect用于此类的嵌套列表。
我正在尝试在元组列表上实现最小堆。例如:
A=[('a',2),('b',1)]
Run Code Online (Sandbox Code Playgroud)
我如何根据这些元组的第二个元素堆化 A ,以便将 A 堆化为[('b',1),('a',2)]?(我必须维护一个最小堆。)
python ×7
heap ×4
min-heap ×1
nested-lists ×1
object ×1
polygon ×1
python-2.7 ×1
shapely ×1
tuples ×1