使用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 中获得列表元素计数的不同方法。你可以根据资源和时间的复杂性从讨论的方法中选择。