如何在python heapq中使用lambdas?

时间:2015-01-19 02:11:50

标签: python heap

在python heapq中如果要放入对象,如何使用lambda来指定其键?与heapq.heappush(Q, v, key=lambda x: f(x))一样。

由于

2 个答案:

答案 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 ...:/