我有一本这样的字典:
d = {'ID_1':[(10, 20), (40, 60), (125, 200)], 'ID_2': [(75, 100), (250, 300)]}
位置和身份证:
^{pr2}$我想在列表中找到最接近测试pos
的值对。在
我在下面试过了:
if IDed in d:
y = d[IDed]
closest = min(y, key=lambda x:abs(x-pos))
这不起作用,因为它不是一个包含单个值的列表。有没有其他方法可以使用类似的方法来完成这项工作。如果没有,我可以通过索引列表并计算每个值对之间的距离来找到解决问题的方法。然而,我认为这样做效率不高。在
我想你应该找到平均值与pos值最接近的一对。。。 所以答案是:
你真的很亲密。波纹管是一种有效的解决方案。在
代码的问题是,您试图使用
x - pos
作为整个元组(例如,(40,60)),而pos
是整目标值。在您可以考虑将其包装在函数中,以避免代码重复,以防需要多次运行它。在
^{pr2}$请注意,术语在嵌套在初始字典中的列表中的出现顺序对于例如
d = {'ID_1': [(10, 20), (40, 69), (71, 200)], ...}
这样的情况非常重要。术语69
和71
与给定目标70
等距,但代码返回(40, 69)
,因为它发现首先。在相关问题 更多 >
编程相关推荐