1

我正在学习用python编写代码。我的第一个自我分配的任务是 Dijkstra 的算法,我能够 make_graph 并填充它,但我一直在确定 SSSP(source)。

我试图用来min(list,key=func())获得价值最低的物品。“key=func()”:在另一个具有相同最小值索引的列表中,必须具有“尚未迭代”的值

如何传递当前列表项,被迭代到 key fund() 以检查它的列表项在 check_list 中具有相应的值,即“尚未迭代”。如果 key=True 会返回最小值吗?

如果 func() 返回一个布尔值,key=func() 如何工作

4

1 回答 1

6

只需使用func,删除()

min(list,key=func)

例子:

>>> lis = [ '1', '2', '3', '4' ]
>>> def func(x):
...     return int(x)
... 
>>> min(lis, key=func) # each value from list is passed to `func`(one at a time)
'1'

在 pythonTrue中等于1False等于0,所以如果func()返回布尔值,那么实际上你的min函数将只比较10

>>> True == 1
True
>>> False == 0
True

例子:

>>> def func(x): return bool(x)
>>> lis = [ 1, [], 3, 4 ]
>>> min(lis, key=func) # bool([]) evaluated to False, ie 0
[]
>>> max(lis, key=func)
1

另一个例子:

>>> lis  = [[4,5,6], [1,2], [13,1,1,1], [1000]]
>>> def func(x):
...     return len(x)  #comparisons are done based on this value
... 
>>> min(lis, key = func)
[1000]
#equal to
>>> min(lis, key = len)
[1000]
于 2013-06-17T08:12:06.980 回答