在(浮点数)列表中查找下一个较低的值?

时间:2016-09-23 14:14:15

标签: python python-2.6

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

2 个答案:

答案 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,则会返回该参数。