如何找到列表中最接近 Python 中给定数字的*最小*数字?
How to find the *smallest* number in the list that is close to a given number in Python?
我想知道是否有办法找到列表中最接近给定数字的最小数字。
敌人e.x.
my_list=[1,10,15,20,45,56]
my_no=9
输出应该等于1
解释:因为 9 介于 1 和 10 之间,我想要较小的数字,即 1.
同样如果my_no=3,输出等于1
我是 python 的新手,因此非常感谢您的帮助。谢谢!
您可以 reduce
来自 functools
:
from functools import reduce
i = reduce(lambda l, r: l if l <= my_no <= r else r, my_list)
print(i)
# Output
1
测试
# my_no = 18
>>> reduce(lambda l, r: l if l <= my_no <= r else r, my_list)
15
# my_no = 59
>>> reduce(lambda l, r: l if l <= my_no <= r else r, my_list)
56
注意:如果 my_no < my_list[0]
,此代码将不起作用。你必须先检查一下。
如果你想坚持基础并想使用 for loop
和 if statement
来接近它,那么可以通过以下方式实现:
my_list=[1,10,15,20,45,56]
given_number = 9
output=my_list[0]
for x in my_list:
if(x < given_number and x > output):
output= x
print(output)
# Output
1
我用 bisect 来做到这一点:
from bisect import bisect_right
my_list=[1,10,15,20,45,56]
my_no=9
targ=bisect_right(my_list, my_number)
#edge case where you give a number lesser than the smallest number in the list. e.g. my_no=0 in your case
if(targ):
print(my_list[targ-1])
输出=1
列表理解是另一种优雅的方式。
my_list=[1,10,15,20,45,56]
my_no = 9
output = max([x for x in my_list if x<=my_no])
print(output) #1
我想知道是否有办法找到列表中最接近给定数字的最小数字。
敌人e.x.
my_list=[1,10,15,20,45,56]
my_no=9
输出应该等于1 解释:因为 9 介于 1 和 10 之间,我想要较小的数字,即 1.
同样如果my_no=3,输出等于1
我是 python 的新手,因此非常感谢您的帮助。谢谢!
您可以 reduce
来自 functools
:
from functools import reduce
i = reduce(lambda l, r: l if l <= my_no <= r else r, my_list)
print(i)
# Output
1
测试
# my_no = 18
>>> reduce(lambda l, r: l if l <= my_no <= r else r, my_list)
15
# my_no = 59
>>> reduce(lambda l, r: l if l <= my_no <= r else r, my_list)
56
注意:如果 my_no < my_list[0]
,此代码将不起作用。你必须先检查一下。
如果你想坚持基础并想使用 for loop
和 if statement
来接近它,那么可以通过以下方式实现:
my_list=[1,10,15,20,45,56]
given_number = 9
output=my_list[0]
for x in my_list:
if(x < given_number and x > output):
output= x
print(output)
# Output
1
我用 bisect 来做到这一点:
from bisect import bisect_right
my_list=[1,10,15,20,45,56]
my_no=9
targ=bisect_right(my_list, my_number)
#edge case where you give a number lesser than the smallest number in the list. e.g. my_no=0 in your case
if(targ):
print(my_list[targ-1])
输出=1
列表理解是另一种优雅的方式。
my_list=[1,10,15,20,45,56]
my_no = 9
output = max([x for x in my_list if x<=my_no])
print(output) #1