在(浮动)数字列表中找到下一个较低的值?
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
.
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
.