Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我有一个值列表:
l = [1, -1]
我想取更接近其他值的列表值,例如 0,我可以这样做:
min(l, key=lambda v: abs(v - 0)) # prints 1
但是如果我更改列表中值的顺序,例如:
l = [-1, 1]
我在上面调用了相同的函数-1而不是1,那么在相同距离处同时存在正值和负值的情况下,我怎样才能始终获得正值?
-1
1
您可以让 lambda 函数返回一个元组,其中的第二项指示它是正数还是负数:
min(l, key=lambda v: (abs(v - 0), v < 0))
比较元组时,第一项优先,其次是第二项。因此,第二项用作“决胜局”。由于False < True,这将优先考虑1(变为(1, False))到-1(变为(1, True).
False < True
(1, False)
(1, True)