我应该如何编写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