给定以下内容:
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)
解决这个问题的更好方法是什么?
内置max
需要一个键函数,您可以将其传递为abs
:
>>> max([3, 7, -10], key=abs)
-10
您可以对结果再次调用abs
以规范化结果:
>>> abs(max([3, 7, -10], key=abs))
10
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
使用map
,只需将abs
作为您的函数传递,然后调用 max:
>>> max(map(abs, [3, 7, -10]))
10
您可以将max()
与生成器推导一起使用:
>>> max(abs(n) for n in [3, 7, -10])
10