查找列表的最大绝对值的 Pythonic 方法

新手上路,请多包涵

给出了以下列表:

 lst = [3, 7, -10]

我想找到绝对值的最大值。对于上面的列表,它将是 10 (abs(-10) = 10)。

我可以这样做:

 max_abs_value = lst[0]
for num in lst:
    if abs(num) > max_abs_value:
        max_abs_value = abs(num)

有什么更好的方法来解决这个问题?

原文由 trojek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 678
2 个回答

内置的 max 有一个关键函数,您可以将其作为 abs 传递:

 >>> max([3, 7, -10], key=abs)
-10

您可以再次对结果调用 abs 以规范化结果:

 >>> abs(max([3, 7, -10], key=abs))
10

原文由 Moses Koledoye 发布,翻译遵循 CC BY-SA 3.0 许可协议

max(max(a),-min(a))

这是目前最快的,因为没有创建中间列表(对于 100 000 个值):

 In [200]: %timeit max(max(a),-min(a))
100 loops, best of 3: 8.82 ms per loop

In [201]: %timeit abs(max(a,key=abs))
100 loops, best of 3: 13.8 ms per loop

In [202]: %timeit max(map(abs,a))
100 loops, best of 3: 13.2 ms per loop

In [203]: %timeit max(abs(n) for n in a)
10 loops, best of 3: 19.9 ms per loop

In [204]: %timeit np.abs(a).max()
100 loops, best of 3: 11.4 ms per loop

原文由 B. M. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题