在(浮动)数字列表中找到下一个较低的值?

Find next lower value in list of (float) numbers?

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 的值,此方法将引发异常。如果这是不受欢迎的行为,您可以改为 return 标记值,例如 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

... 如果您更像是 "ask forgiveness" 人而不是 "look before you leap" 人。

您可以使用 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.