Python - 从其他列表中统计元素频率


元素频率是指在两个不同的列表中计算元素出现次数。一个列表定义唯一元素,另一个列表定义相对于第一个列表的相同元素的重复次数。然后,使用字典中的某些条件和操作,将第一个列表的每个元素表示为键,而值对将表示第二个列表中键元素的总重复次数。在 Python 中,可以使用一些内置函数,例如 Counter()、count()、defaultdict() 和 unique() 来解决从其他列表中统计元素频率的问题。

让我们来看一个例子。

给定两个列表:

lst_1 = [1, 2, 3, 4]

lst_2 = [1, 1, 2, 1, 2, 2, 2, 3, 4, 4, 4, 4, 4]

最终结果为 {1: 3, 2: 4, 3: 1, 4: 5}

语法

以下语法在示例中使用

Counter()

内置方法 Counter() 是字典的一个子类,它跟踪给定列表中相同项的数量。

count()

内置方法 count() 接受单个参数作为输入,返回特定列表中存在的项数。

defaultdict()

defaultdict() 是 Python 中的一个内置函数,它会自动生成键值对,其中包含默认值。此函数有助于处理字典中缺失的键。

unique()

unique() 是 Python 中的一个内置函数,它返回唯一元素作为排序数组。

使用 Counter()

在下面的示例中,我们将从提及库集合和导入名为 Counter 的模块开始程序,该模块将用于计算元素的频率。然后创建两个列表以分别存储在变量 l1 和 l2 中。接下来,使用内置函数 Counter(),它接受第二个列表作为参数来计算键的重复次数并将其存储在变量 cnt 中。然后初始化变量 res - 使用变量 i 的字典推导式设置为键,并遍历列表 l1 以获取相对于 l2 的元素的总计数匹配数,并将其存储在变量 res 中。最后,我们使用变量 res 打印结果。

示例

from collections import Counter
# create the list
l1 = [40, 60, 80, 90]
l2 = [40, 60, 60, 5, 80, 10, 40, 90, 80, 10, 1]
cnt = Counter(l2)
res = {i: cnt[i] for i in l1}
print("The resulting frequency of key elements:\n", res)

输出

The resulting frequency of key elements:
 {40: 2, 60: 2, 80: 2, 90: 1}

使用循环和字典

在下面的示例中,程序从创建两个不同的列表开始。然后使用空字典来存储程序的最终输出。接下来,使用 for 循环遍历第一个列表,并将条件设置为第一个元素,该元素通过使用内置函数 count() 计数元素来等效于第二个列表。最后,打印结果。

示例

l1 = [40, 60, 80, 90]
l2 = [40, 60, 60, 5, 80, 10, 40, 90, 80, 10, 1]
# empty dictionary to store the final output
res = {}
for i in l1:
    res[i] = l2.count(i)
print("The resulting frequency of key elements:\n", res)

输出

 The resulting frequency of key elements:
 {40: 2, 60: 2, 80: 2, 90: 1}

使用 defaultdict() 函数

在下面的示例中,程序使用集合库并导入模块 defaultdict。然后创建两个列表以分别存储在变量中。然后使用内置函数 defaultdict(),该函数负责处理如果列表的第一个元素与列表的第二个元素不匹配则处理缺失的键,并将其存储在变量 count 中。接下来,使用 for 循环遍历列表的第二个元素,并使用 += 运算符递增 1。然后使用字典将第一个元素列表设置为键,第二个元素设置为计数器。最后,显示结果。

示例

from collections import defaultdict
# create the list
l1 = [40, 60, 80, 90]
l2 = [40, 60, 60, 5, 80, 10, 40, 90, 80, 10, 1]
# set the condition for the frequency of elements
count = defaultdict(int)
for i in l2:
    count[i] += 1
# using dictionary
res = {i: count[i] for i in l1}
# display the result
print("The resulting frequency of key elements:\n", res)

输出

 The resulting frequency of key elements:
 {40: 2, 60: 2, 80: 2, 90: 1}

使用 numpy 库和 unique() 函数

在下面的示例中,程序使用必要的工具,例如 numpy 库和两个不同的列表来计算元素的频率。接下来,使用内置函数 unique(),它返回唯一元素作为排序结果,并将相同的元素存储在两个不同的变量中。现在使用字典推导式来设置使用内置函数 where() 和 unique() 计算元素频率的操作。最后,它将显示结果。

示例

import numpy as np
# create the list
l1 = [40, 60, 80, 90]
l2 = [40, 60, 60, 5, 80, 10, 40, 90, 80, 10, 1]
# set the unique count of each element
unique_l1, counts_l1 = np.unique(l2, return_counts=True)
res = {i: counts_l1[np.where(unique_l1 == i)][0] for i in l1}
# display the output
print("The resulting frequency of key elements:\n", res)

输出

 The resulting frequency of key elements:
 {40: 2, 60: 2, 80: 2, 90: 1}

结论

元素频率是指出现在给定输入列表或数据集中出现的元素个数。可以通过计算列表中出现的次数来确定频率。可以使用各种内置函数,例如 unique()、where()、defaultdict() 等来解决特定条件和操作。这种类型的程序适用于文本挖掘、市场研究、质量控制等一些应用程序。

更新于:2023年8月16日

211 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告