如何在 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
结果数组的第一项和最后一项。