在python heapq中如果要放入对象,如何使用lambda来指定其键?与heapq.heappush(Q, v, key=lambda x: f(x))
一样。
由于
答案 0 :(得分:2)
你做不到。或者更确切地说,您不能将其指定为lambda。但是,您可以创建一堆元组heapq.heappush(Q, (key(v), v))
和heapq.heappop(Q)[1]
。
答案 1 :(得分:0)
详细说明我的comment,如果f(v)
始终返回唯一值,或者可以订购v
({也可以设置顺序,例如U2EF1's solution)。
我使this example变得更容易使用heapq并允许lambda进行排序。
通常,您可以添加一个唯一的数字来克服该限制:
heapq.heappush(Q, create_item(v, f))
(key, v) = heapq.heappop()
# f is your desired function/lambda
# unique_value() generates a different value each time (e.g. a counter)
def create_item(v, f):
key = (f(v), unique_value())
return (key, v)
很遗憾,无法将函数发送到heapq ...:/