Линия:
ref_len = min(ref_len_list, key=lambda x:abs(x-8))
будет искать число в ref_len_list
, для которого abs(number - 8)
имеет наименьшее значение, и, таким образом, является значением, ближайшим к 8
. Из этого списка он получает номер 9
, потому что abs(9-8) < abs(5-8)
. Если бы в этом списке были и 9
s, и 7s
, он бы просто дал первый из них.
Итак:
min([9,9,5,9], key=lambda x:abs(x-8)) # --> 9
min([7,9,5,6], key=lambda x:abs(x-8)) # --> 7
min([9,7,5,6], key=lambda x:abs(x-8)) # --> 9
min([7,9,5,8], key=lambda x:abs(x-8)) # --> 8
Строка работает с использованием функции min
и передаёт ей необязательный аргумент key
. Аргумент key
будет указывать для функции, какие критерии она должна использовать при ранжировании элементов списка.
В этом случае аргументу key
присваивается анонимная функция lambda
, которая принимает число x
в качестве аргумента и возвращает abs(x-8)
.
Функция lambda x:abs(x-8))
может быть переписана следующим образом:
def func(x):
return abs(x-8)