如何在 Python 中計算一維陣列中某項的出現次數
Debolina Dasgupta
2023年1月30日
2020年3月28日
在處理陣列時,開發人員可能面臨的主要問題之一是計算元素的出現次數。想象一下,如果你有一個電子商務網站在 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
函式-僅適用於整數陣列
但是,如果你的陣列只有整數,則可以使用 NumPy
的 bincount
函式。最好的地方是,它將結果作為陣列返回。
>>>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
結果陣列的第一項和最後一項。