Python 在集合中找到最接近给定值的值

Python 在集合中找到最接近给定值的值,python,set,min,Python,Set,Min,我试图在b组中找到最接近5的数字。这是我的密码 b={1,2,45,65,3,2,8} one=5 a=set() for x in b: c=abs(x-one) a.add(c) print(min(a)) 问题是,您正在添加参考值和集合中的值之间的差值,因此5-3=2。我建议进行更好的改进,根本不要使用set,因为与仅使用如下所示的变量相比,set效率非常低: b={1,2,45,65,3,2,8} one=5 nearest = None smallest_gap = N

我试图在b组中找到最接近5的数字。这是我的密码

b={1,2,45,65,3,2,8}
one=5
a=set()
for x in b:
  c=abs(x-one)  
  a.add(c)
print(min(a))

问题是,您正在添加参考值和集合中的值之间的差值,因此5-3=2。我建议进行更好的改进,根本不要使用set,因为与仅使用如下所示的变量相比,set效率非常低:

b={1,2,45,65,3,2,8}
one=5

nearest = None
smallest_gap = None
for x in b:
    nearest = x
    smallest_gap = abs(one - x)
    break

for x in b:
  if abs(one - x)<smallest_gap:
    smallest_gap = abs(one - x)
    nearest = x
print(nearest)
b={1,2,45,65,3,2,8}
一=5
最近的=无
最小间隙=无
对于b中的x:
最近的=x
最小间隙=绝对值(1-x)
打破
对于b中的x:

如果abs(one-x)如果要使用列表查找距离5最近的元素,请按照以下方法操作:

b={1,2,45,65,3,2,8}
b = list(b)
one=5
a=[]
for x in b:
  c=abs(x-one)  
  a.append(c)
print(b[a.index(min(a))])

您可以将
参数用于
min
以实现以下目的:

b = {1,2,45,65,3,2,8}
target = 5 
result = min(b, key=lambda x: abs(x - target))

为什么集合的最小值应为3?当
x
为3时,减去5,得到
-2
,然后取其绝对值,得到
2
,然后将其添加到集合
a
,使其成为最小值。对于这样的操作,什么会影响使用集合而不是列表的选择?@SeyiDaniel Why list?用简单明了的解决方案,这根本不重要。非常感谢,这看起来很有趣。那么b是b中的元素,其中abs(x目标)是最小值?这是一种引用集合中元素的方法。因为集合没有索引编号???
result
是集合
b
中的元素,因此
abs(result-target)
小于或等于
b
中的其他元素。我不知道你所说的“引用集合中元素的方法”是什么意思。我的意思是集合不支持索引。没错。它们确实支持测试成员资格(在某些集合中使用
elem)和迭代(因此它们可以用于
for
循环,或者用作
min
等接受iterables的函数的参数),但不支持索引。@jasmijn代码为b={0,-2}target=-1、、,,,有没有办法检查两个数字是否在同一距离,我可以选择最小的一个;在这种情况下,是否改为获取-2?