我應該如何編寫find_nearest_lower
函數?在(浮點數)列表中查找下一個較低的值?
>>> values = [10.1, 10.11, 10.20]
>>> my_value = 10.12
>>> nearest_lower = find_nearest_lower(values, my_value)
>>> nearest_lower
10.11
這需要在Python 2.6中工作,無需訪問numpy。
我應該如何編寫find_nearest_lower
函數?在(浮點數)列表中查找下一個較低的值?
>>> values = [10.1, 10.11, 10.20]
>>> my_value = 10.12
>>> nearest_lower = find_nearest_lower(values, my_value)
>>> nearest_lower
10.11
這需要在Python 2.6中工作,無需訪問numpy。
>>> def find_nearest_lower(seq, x):
... return max(item for item in seq if item < x)
...
>>> values = [10.1, 10.11, 10.20]
>>> my_value = 10.12
>>> nearest_lower = find_nearest_lower(values, my_value)
>>> nearest_lower
10.11
如果沒有在seq
是比x
小的任何值此方法將引發異常。如果這是令人不快的行爲,你可以改爲返回一個標記值,如無:
def find_nearest_lower(seq, x):
candidates = [item for item in seq if item < x]
if not candidates: return None
return max(candidates)
或者
def find_nearest_lower(seq, x):
try:
return max(item for item in seq if item < x)
except ValueError:
return None
...如果你比一個更大的「請求原諒」的人「看你跳躍」的人。
您可以使用itertools.dropwhile
:
>>> from itertools import dropwhile
>>> values = [10.1, 10.11, 10.20]
>>> my_value = 10.12
>>> next(dropwhile(lambda x: x > my_value, sorted(values, reverse=True)))
10.11
您也可以通過一個default
參數next()
如果迭代器,而不是用完提高StopIteration
的,將被退回。
是否總是排序值? – depperm
是的,你可以使用muzido鏈接的代碼,只是跳過'abs'使它對「最接近的」或「最接近的」更敏感,而不是「最接近」。 – nostradamus
@depperm是的,他們總是排序。 – fredrik