使用Python获取列表元素的频率
这篇短文将解释使用 Python 计算所有列表元素的总出现次数的可能方法。我们还将看到这样做的利与弊。
Python 是一种非常通用的语言,它允许开发者专注于关键问题,而不是其实现。与其他当代语言如C或C++相比,用Python编码相对更容易。
项目频率问题可以通过Python以多种方式解决。首先,让我们正式地介绍一下这个问题。
考虑一个无序的数字列表,如List A= [2, 4, 7, 8, 12, 4, 6, 7, 8, 91, 8]
,我们想得到列表中每个数字的频率,检查一个数字在列表中出现的次数。
答案应该是这样的:{'2': 1, '4': 2, '6': 1, '7': 2, '8': 3, '12': 1, '91': 1 }
.这意味着数字2
存在1
次,4
存在2
次,6
的频率为1
,以此类推。
使用collections
模块,用Python获取列表元素的频率
在这个方法中,我们将使用collections
模块。这个模块的 counter 函数返回一个容器,记录一个数字在列表中出现的次数。
请看下面的代码。
import collections
a = [2, 4, 7, 8 , 12, 4, 6, 7, 8, 91, 8]
counter = collections.Counter(a)
print(counter)
print(type(counter))
上述代码产生的输出结果如下。
Counter({8: 3, 4: 2, 7: 2, 2: 1, 12: 1, 6: 1, 91: 1})
<class 'collections.Counter'>
你可以使用下面的代码从一个容器中获得唯一的数字。
counter.keys()
上面这行代码得到的结果如下。
dict_keys([2, 4, 7, 8, 12, 6, 91])
同样,为了得到每个唯一号码的计数,你可以运行这段代码:
counter.values()
其输出结果如下:
dict_values([1, 2, 2, 3, 1, 1, 1])
使用Python获取列表元素频率的手动代码
在方法1中,我们使用collections
模块进行计数。但是在这种方法中,我们必须进行手工编码以获得所需的结果。
这种方法的代码如下:
List_numbers= [2, 4, 7, 8 , 12, 4, 6, 7, 8, 91, 8]
dict_count={}
for i, number in enumerate(List_numbers):
if number in dict_count.keys():
dict_count[number] =dict_count[number] + 1
else:
dict_count[number] = 1
print(dict_count)
这是一个简单明了的代码,我们使用字典类型来存储对每个数字的计数。一个字典的键总是保持唯一的,这意味着这些不能被重复。
上述代码产生以下输出。
{2: 1, 4: 2, 7: 2, 8: 3, 12: 1, 6: 1, 91: 1}
这段代码的复杂性是O(n)
。
使用NumPy
来获取列表元素的频率,使用 Python
在numpy
模块中,unique()
函数可以灵活地找到列表中每个元素的频率。
import numpy as np
List_numbers= [2, 4, 7, 8 , 12, 4, 6, 7, 8, 91, 8]
print(np.unique(List_numbers, return_counts=True))
np.unique()
函数用于查找一个数组的唯一元素。它返回一个数组中经过排序的唯一元素。
可选的参数return_counts
,使我们可以得到相应的元素数。
前面的代码输出:
(array([ 2, 4, 6, 7, 8, 12, 91]), array([1, 2, 1, 2, 3, 1, 1]))
为了获得计数,你可以使用:
np.unique(List_numbers, return_counts=True)[1]
在这篇文章中,我们提出了在 Python 中获得列表元素计数的不同方法。你可以根据资源和时间的复杂性从讨论的方法中选择。