из списка целых чисел, получить номер, ближайший и меньше, чем заданное значение - PullRequest
1 голос
/ 30 марта 2019

Я пишу код, в котором мне нужно выбрать из списка целое число, которое не только ближе всего к заданному значению, но и меньше его одновременно.Как я могу отредактировать код в соответствии с обоими условиями?

Я попытался использовать встроенную функцию min (), которую я нашел на этом сайте.Это дает мне целое число, которое является ближайшим к данному значению, независимо от того, является ли оно большим или меньшим, чем заданное значение.

def price(my_list,real_price):
   closest_number=min(my_list, key=lambda x:abs(x-real_price))
   return closest_number

my_list=[101,90,70]
real_price=100
closest_number=price(my_list,real_price)
print(closest_number)

Для приведенного выше кода я хочу, чтобы на выходе было 90, но я получаю 101

Ответы [ 3 ]

2 голосов
/ 30 марта 2019

Вместо min вы должны получить max чисел, которые меньше real_price:

def price(my_list,real_price):
    return max(price for price in my_list if price <= real_price)

С этим изменением ваш код выведет: 90

0 голосов
/ 30 марта 2019

Используя List comprehension и max, вы можете получить 90.

def price(my_list,real_price):
   return max([x for x in my_list if ( x <= real_price )])

my_list=[101,90,70]
real_price=100
closest_number=price(my_list,real_price)
print(closest_number)
0 голосов
/ 30 марта 2019

То, что у вас есть, близко; вам просто нужно принимать только цифры, которые меньше real_price:

def price(my_list, real_price):
   closest_number = min((number for number in my_list if number < real_price), key=lambda x: abs(x - real_price))
   return closest_number

my_list = [101,90,70]
real_price = 100
closest_number = price(my_list, real_price)
print(closest_number)

Выход:

90
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...