Python程序查找字符串列表中公共元素的频率


在这篇 Python 文章中,给定的任务是获取字符串列表中公共元素的频率。有时,使用 Python 分析的列表存在于 Excel 文件中。要从 Excel 获取此列表,使用一个名为 openpyxl 的模块。在这篇 Python 文章中,通过三个不同的示例,给出了获取字符串列表中重复项频率的方法。在示例 1 中,找到了字符串列表中公共字符的频率。在接下来的两个示例中,给出了方法,其中给出了字符串列表中公共单词的频率。在这些示例中,字符串列表是从 Excel 文件的列中获取的。

预处理步骤

步骤 1 − 使用 Google 帐户登录。转到 Google Colab。打开一个新的 Colab 笔记本,并在其中编写 Python 代码。

步骤 2 − 首先将 Excel 文件“oldrecord5.xlsx”上传到 Google Colab。

步骤 3 − 导入“openpyxl”。

步骤 4 − 使用 openpyxl.load_workbook 函数加载 Excel 文件。

步骤 5 − 在名为 myxlsxsheet 的变量中打开活动工作表

步骤 6 − 使用 Pandas 将此字符串列提取到数据框中。

步骤 7 − 将数据框转换为列表。将此列表称为“title_list”

这些示例中使用的 Excel 文件内容

                                      

图:显示示例中使用的 Excel 文件 oldrecord5.xls

将 Excel 文件上传到 colab

                                    

图:将 oldrecord5.xls 上传到 Google Colab

示例 1:使用 reduce 函数获取字符串列表中找到的字符的频率

在这种方法中,使用了 reduce 函数。

步骤 1 − 使用来自上述预处理步骤的列表“title_list”。

步骤 2 − 使用 reduce、lambda 和 Counter 查找这些字符串中所有公共字符的字符频率。

步骤 3 − 以字典的形式显示结果。

在 Google Colab 工作表的代码单元格中编写以下代码

import openpyxl
from openpyxl import load_workbook
import pandas as pd
from functools import reduce
from collections import Counter
# load excel file with its path
myxlsx = openpyxl.load_workbook("oldrecord5.xlsx")
myxlsxsheet = myxlsx.active

# Convert to DataFrame
df = pd.DataFrame(myxlsxsheet.values)

#Select those rows that contain "Discussion" String
df1=df[df.iloc[:,3].str.contains('Discussion')]

#Select only the titles' column 
df2 = df1.iloc[:,3]

title_list=df2.values.tolist()
print(title_list)

itemFreq = reduce(lambda m, n: m & n, (Counter(elem) for elem in title_list[1:]),Counter(title_list[0]))

print("Common Characters and their occurrence : " , str(dict(itemFreq)))

查看结果

按下代码单元格上的播放按钮以查看结果。

['Types of Environment - Class Discussion', 'Management Structure and Nature  - Class Discussion', 'Macro- Demography, Natural, Legal & Political  - Class Discussion']
Common Characters and their occurrence :  {'e': 2, 's': 5, ' ': 5, 'o': 1, 'n': 1, 'i': 2, 'r': 1, 'm': 1, 't': 1, '-': 1, 'C': 1, 'l': 1, 'a': 1, 'D': 1, 'c': 1, 'u': 1}

图 1:显示使用 Google Colab 的结果。

示例 2:通过组合和排序列表获取字符串列表中找到的单词的频率

要遵循此方法,我们使用了以下步骤

步骤 1 − 使用来自上述预处理步骤的列表“title_list”。

步骤 2 − 对单个列表项使用 split 将其分成单词,然后将这些单词组合成一个组合列表。

步骤 3 − 对此组合列表进行排序,并使用 Counter 查找频率。以字典的形式显示结果。

在 Google Colab 工作表的代码单元格中编写以下代码。

from collections import Counter
import openpyxl
from openpyxl import load_workbook
import pandas as pd

# load excel file with its path
myxlsx = openpyxl.load_workbook("oldrecord5.xlsx")
myxlsxsheet = myxlsx.active

# Convert to DataFrame
df = pd.DataFrame(myxlsxsheet.values)

#Select those rows that contain "Discussion" String
df1=df[df.iloc[:,3].str.contains('Discussion')]

#Select only titles' column 
df2 = df1.iloc[:,3]

title_list=df2.values.tolist()
print(title_list)
lst1= title_list[0].split()
lst2= title_list[1].split()
lst3= title_list[2].split()
combinedlist = [*lst1, *lst2, *lst3]

# Print output
print("Concatenated List: ",combinedlist)

for elem in sorted(combinedlist):
   print(elem)

frequencyofelements=Counter(combinedlist)
print("frequency of elements: ",frequencyofelements)

示例 2 的输出

要查看 colab 中的结果,请按下代码单元格上的播放按钮。

['Types of Environment - Class Discussion', 'Management Structure and Nature  - Class Discussion', 'Macro- Demography, Natural, Legal & Political  - Class Discussion']
Concatenated List:  ['Types', 'of', 'Environment', '-', 'Class', 'Discussion', 'Management', 'Structure', 'and', 'Nature', '-', 'Class', 'Discussion', 'Macro-', 'Demography,', 'Natural,', 'Legal', '&', 'Political', '-', 'Class', 'Discussion']
&
-
-
-
Class
Class
Class
Demography,
Discussion
Discussion
Discussion
Environment
Legal
Macro-
Management
Natural,
Nature
Political
Structure
Types
and
of
frequency of elements:  Counter({'-': 3, 'Class': 3, 'Discussion': 3, 'Types': 1, 'of': 1, 'Environment': 1, 'Management': 1, 'Structure': 1, 'and': 1, 'Nature': 1, 'Macro-': 1, 'Demography,': 1, 'Natural,': 1, 'Legal': 1, '&': 1, 'Political': 1})

图 2:显示使用 Google Colab 的结果。

示例 3:使用 Pandas 及其函数获取字符串列表中找到的单词的频率

要遵循此方法,我们使用了以下步骤

步骤 1 − 使用来自上述预处理步骤的列表“title_list”。

步骤 2 − 对单个列表项使用 split 将其分成单词,然后将这些单词组合成一个组合列表。

步骤 3 − 使用 Pandas Series,然后使用 value_counts() 函数计算所用单词的频率。显示输出。

在 Google Colab 工作表的代码单元格中编写以下代码。

import openpyxl
from openpyxl import load_workbook
import pandas as pd

# load excel file with its path
myxlsx = openpyxl.load_workbook("oldrecord5.xlsx")
myxlsxsheet = myxlsx.active

# Convert to DataFrame
df = pd.DataFrame(myxlsxsheet.values)

#Select those rows that contain "Discussion" String
df1=df[df.iloc[:,3].str.contains('Discussion')]

#Select only titles' column 
df2 = df1.iloc[:,3]

title_list=df2.values.tolist()
print(title_list)
lst1= title_list[0].split()
lst2= title_list[1].split()
lst3= title_list[2].split()

#combinedlist = [*lst1, *lst2, *lst3, *lst4, *lst5]
combinedlist = [*lst1, *lst2, *lst3]
# Print output
print("Concatenated List: ",combinedlist)

frequencyofelements = pd.Series(combinedlist).value_counts()
print("frequency of elements: ") 
print(frequencyofelements)   

查看结果

按下代码单元格上的播放按钮以查看结果

['Types of Environment - Class Discussion', 'Management Structure and Nature  - Class Discussion', 'Macro- Demography, Natural, Legal & Political  - Class Discussion']
Concatenated List:  ['Types', 'of', 'Environment', '-', 'Class', 'Discussion', 'Management', 'Structure', 'and', 'Nature', '-', 'Class', 'Discussion', 'Macro-', 'Demography,', 'Natural,', 'Legal', '&', 'Political', '-', 'Class', 'Discussion']
frequency of elements: 
-              3
Class          3
Discussion     3
Types          1
of             1
Environment    1
Management     1
Structure      1
and            1
Nature         1
Macro-         1
Demography,    1
Natural,       1
Legal          1
&              1
Political      1
dtype: int64

在这篇 Python 文章中,通过三个不同的示例,给出了显示如何查找字符串列表中找到的元素频率的方法。在第一个示例中,给出了通过将元素视为字符串中出现的简单字符来执行此操作的方法。在示例二和三中,首先将字符串分隔成单个有意义的单词,然后将它们用作元素以获取频率。

更新于: 2023年7月10日

139 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.