簡體   English   中英

查找列表的最大絕對值的Pythonic方法

[英]Pythonic way to find maximum absolute value of list

給出以下列表:

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

使用map ,只需將abs作為函數傳遞,然后在其上調用max:

>>> max(map(abs, [3, 7, -10]))
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

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

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

ProTip:盡量避免在內置名稱(例如list之后命名變量。 重命名為lstL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM