如何在 Python 中計算一維陣列中某項的出現次數

Debolina Dasgupta 2023年1月30日 2020年3月28日
  1. 使用 collections 查詢 Python 中陣列中的出現次數
  2. 在 Python 中使用 NumPy 庫查詢陣列中的出現次數
如何在 Python 中計算一維陣列中某項的出現次數

在處理陣列時,開發人員可能面臨的主要問題之一是計算元素的出現次數。想象一下,如果你有一個電子商務網站在 10 天內售出的商品數量陣列,你想知道售出 100 件以上商品的天數。

sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]

解決最簡單的方法是對陣列中出現 100 的次數進行計數。

使用 collections 查詢 Python 中陣列中的出現次數

collections 就像容器一樣儲存資料集合。我們可以輕鬆匯入 collections 模組並使用計數方法。

程式碼:

>>>import collections
>>>sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]  
>>>print(collections.Counter(sales))
Counter({100: 4, 80: 3, 70: 2, 10: 2, 0: 1, 20: 1, 30: 1, 40: 1})

結果輸出是字典型別。它列出了陣列中每個元素髮生了多少次。

但是,如果要列印在 sales 陣列中出現 100 的次數,則可以從字典中獲取它。

>>>print(collections.Counter(sales)[100])
4

Collection 模組也適用於十進位制數字和字串。

>>>floatarr=[0.7, 10.0, 10.1, .8, .7, .8, .2, .1, 10.0, 
10.0, .8, .8, .7, .7, .8]
>>>print(collections.Counter(floatarr))
Counter({0.8: 5, 0.7: 4, 10.0: 3, 10.1: 1, 0.2: 1, 0.1: 1})

>>>stringarr=["george","mark","george","steve","george"]
>>>print(collections.Counter(stringarr))
Counter({'george': 3, 'mark': 1, 'steve': 1})

在 Python 中使用 NumPy 庫查詢陣列中的出現次數

但是,我們也可以使用 NumPy,它是 Python 中定義的庫,用於處理大型陣列,並且還包含大量數學函式。

你可以通過多種方式使用 NumPy 中定義的函式來返回陣列中的元素計數。

NumPy 中使用 unique 函式

unique 函式與 Count 一起返回每個元素計數的字典。它也適用於十進位制數字和字串。

>>>import collections, numpy
>>>aUnique = numpy.array([0, 100, 100, 80, 70, 80, 20, 10, 100, 
100, 80, 70, 10, 30, 40])

>>>unique, counts = numpy.unique(aUnique, return_counts=True)

>>>print(dict(zip(unique, counts)));  
{0: 1, 10: 2, 20: 1, 30: 1, 40: 1, 70: 2, 80: 3, 100: 4}

NumPy 中使用 count_nonzero 函式

使用 count_nonzero 返回我們正在搜尋的元素的計數。它提供了易於閱讀的介面和更少的程式碼行。

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10, 
100, 100, 80, 70, 10, 30, 40,"abc"])
>>>print(numpy.count_nonzero(aCountZero == "abc"))
1

count_nonzero 也適用於十進位制數字和字串。

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,

100, 100, 80, 70, 10, 30, 40])

>>>print(numpy.count_nonzero(aCountZero == 100.1))
1

NumPy 中使用 bincount 函式-僅適用於整數陣列

但是,如果你的陣列只有整數,則可以使用 NumPybincount 函式。最好的地方是,它將結果作為陣列返回。

>>>abit = numpy.array([0, 6, 0, 10, 0, 1, 1, 0, 10, 9, 0, 1])

>>>print(numpy.bincount(abit))

[5 3 0 0 0 0 1 0 0 1 2]

對於陣列中的數字,結果以升序顯示元素數。例如,陣列 abit 中的 0 出現 5 次,10 出現了 2 次,它們分別 bincount 結果陣列的第一項和最後一項。

相關文章 - Python Array