我偶然发现了一个问题,即我无法找到解决方案。我有一个坐标列表,包含正值和负值,我需要找到列表中距离零最远的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之间
答案 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)
你必须为你做一个能够做到这一点的功能。
我建议尝试对坐标进行平方,然后得到平方根,因为无论负坐标值还是正坐标值,这都会给出所有正数。
然后,您必须让功能气泡对这些数字进行排序才能找到最高距离值,并打印出匹配对。