Pythonic方式找到列表的最大绝对值

tro*_*jek 8 python python-3.x

以下列表给出:

lst = [3, 7, -10]
Run Code Online (Sandbox Code Playgroud)

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

我可以这样做:

max_abs_value = lst[0]
for num in lst:
    if abs(num) > max_abs_value:
        max_abs_value = abs(num)
Run Code Online (Sandbox Code Playgroud)

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

Mos*_*oye 29

内置max需要一个关键功能,您可以将其传递为abs:

>>> max([3, 7, -10], key=abs)
-10
Run Code Online (Sandbox Code Playgroud)

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

>>> abs(max([3, 7, -10], key=abs))
10
Run Code Online (Sandbox Code Playgroud)


idj*_*jaw 6

使用map,只是abs作为你的函数传递,然后调用max:

>>> max(map(abs, [3, 7, -10]))
10
Run Code Online (Sandbox Code Playgroud)

  • 会是我的第一次猜测(+1) (2认同)

B. *_* M. 6

max(max(a),-min(a))
Run Code Online (Sandbox Code Playgroud)

它现在是最快的,因为没有创建中间列表(对于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
Run Code Online (Sandbox Code Playgroud)


Chr*_*ean 5

您可以使用max()生成器理解:

>>> max(abs(n) for n in [3, 7, -10])
10
>>> 
Run Code Online (Sandbox Code Playgroud)

ProTip:尽量避免在内置名称之后命名变量list.重命名为其他类似lstL.