我应该如何编写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。
答案 0 :(得分:5)
>>> 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
,则此方法会引发异常。如果这是不良行为,您可以返回一个标记值,例如None:
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
...如果你更多的是&#34;请求宽恕&#34;人而不是在你跳跃之前看看#34;人
答案 1 :(得分:1)
您可以使用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
,则会返回该参数。