Python 在集合中找到最接近给定值的值
我试图在b组中找到最接近5的数字。这是我的密码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={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?