Joh*_*uhy 15
两种选择(除了Devin Jeanpierre的建议):
在使用堆之前装饰您的数据.这相当于key=排序选项.例如,如果您(由于某种原因)想要根据他们的正弦堆积数字列表:
data = [ # list of numbers ]
heap = [(math.sin(x), x) for x in data]
heapq.heapify(heap)
# get the min element
item = heappop(heap)[1]
Run Code Online (Sandbox Code Playgroud)该heapq模块以纯python实现.您可以将其复制到工作目录并更改相关位.从快速查看,您将不得不修改siftdown()和siftup(),如果需要,可能需要更新和最小化.
Dev*_*rre 14
是的,有一种方法.定义一个实现自定义比较器的包装类,并使用它们的列表而不是实际对象的列表.这仍然是使用heapq模块时最好的,因为它没有像排序函数/方法那样提供key =或cmp =参数.
def gen_wrapper(cmp):
class Wrapper(object):
def __init__(self, value): self.value = value
def __cmp__(self, obj): return cmp(self.value, obj.value)
return Wrapper
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7266 次 |
| 最近记录: |