>>> 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
... Если вы скорее «просить прощения» человека, чем «Посмотрите, прежде чем прыгать».
- значения всегда отсортированы? – depperm
Да, вы можете использовать код из ссылки muzido и просто пропустить 'abs', чтобы сделать его чувствительным к« ближайшему нижнему »или« ближайшему верхнему », а не просто« ближайшему ». – nostradamus
@ depperm Да, они всегда сортируются. – fredrik