如何在python中找到距离零最远的值

时间:2013-12-30 17:42:01

标签: python python-3.3

我偶然发现了一个问题,即我无法找到解决方案。我有一个坐标列表,包含正值和负值,我需要找到列表中距离零最远的x坐标。这有一个非常简单的解决方案:

foo = max(map(lambda x: abs(x[0]),bar))

其中bar是坐标元组的列表。

这个问题是,一旦我找到了最远离零的值,我必须保留其原始符号(正或负)以便以后计算。我无法在bar中索引foo来查找原始值,因为foo可能在列表中是否定的,因此无法编入索引。另一种可能的解决方案可能是:

foo = max(enumerate(bar),key=lambda x: abs(x[1][0]))

然后使用枚举在bar中查找原始值的索引:

bar=[[-1,3],[5,2],[-8,2]]
#bar enumerated: [(0,[-1,3]),(1,[5,2]),(2,[-8,2])]

foo=max(enumerate(bar),key=lambda x: abs(x[1][0]))
#foo = (2,[8,2])
foo = bar[foo[0]]

但我想知道这个问题还有什么其他可能的解决方案?

编辑:我应该注意,条形可能介于10,000到100,000之间

2 个答案:

答案 0 :(得分:3)

嗯,事实证明是简单的代码:

max(bar, key=lambda x: abs(x[0]))

实际上会正确返回负值;

bar=[[-1,3],[5,2],[-8,2]]
foo=max(bar,key=lambda x: abs(x[0]))
#foo = [-8,2]

我不知道为什么我会掠过它,我想我只是高估了问题的原始复杂性。

答案 1 :(得分:1)

你必须为你做一个能够做到这一点的功能。

我建议尝试对坐标进行平方,然后得到平方根,因为无论负坐标值还是正坐标值,这都会给出所有正数。

然后,您必须让功能气泡对这些数字进行排序才能找到最高距离值,并打印出匹配对。