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

acruukt9  于 2023-03-04  发布在  Python
关注(0)|答案(4)|浏览(138)

鉴于以下情况:

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)

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

w6mmgewl

w6mmgewl1#

内置的max接受一个key函数,你可以把它作为abs传递:

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

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

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

new9mtju2#

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
mwkjh3gx

mwkjh3gx3#

使用map,并将abs作为函数传递,然后对该函数调用max:

>>> max(map(abs, [3, 7, -10]))
10
ulmd4ohb

ulmd4ohb4#

您可以将max()与生成器理解一起使用:

>>> max(abs(n) for n in [3, 7, -10])
10

相关问题