欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 如何统计字符串中单词出现的次数

如何统计字符串中单词出现的次数

2025/1/23 6:38:04 来源:https://blog.csdn.net/m0_56026872/article/details/145310068  浏览:    关键词:如何统计字符串中单词出现的次数

如何统计字符串中单词出现的次数

在编程中,统计字符串中每个单词出现的次数是一个非常常见的问题。今天我们将通过一个 Python 示例来演示如何实现这一功能。我们将用到 Python 的 map 函数和 reduce 函数来完成任务。

示例代码

假设我们有如下字符串:

str1 = "hello world java javaScript html css hello css java javaScript world python python html"

我们的目标是统计每个单词在这个字符串中出现的次数。

步骤 1:拆分字符串为单词序列

首先,我们使用 split() 方法将字符串拆分成单词列表:

lst = str1.split(' ')
print(lst)

输出的单词列表是:

['hello', 'world', 'java', 'javaScript', 'html', 'css', 'hello', 'css', 'java', 'javaScript', 'world', 'python', 'python', 'html']

步骤 2:使用 map 函数为每个单词计数

接下来,我们使用 map 函数来为每个单词计数。map 会对列表中的每个单词应用 lambda 函数,将每个单词映射为字典形式 {单词: 1}:

map_lst = list(map(lambda item: {item: 1}, lst))
print(map_lst)

输出的结果是:

[{'hello': 1}, {'world': 1}, {'java': 1}, {'javaScript': 1}, {'html': 1}, {'css': 1}, {'hello': 1}, {'css': 1}, {'java': 1}, {'javaScript': 1}, {'world': 1}, {'python': 1}, {'python': 1}, {'html': 1}]

每个单词被表示为字典,值为 1。

步骤 3:使用 reduce 函数叠加计数

接下来,我们需要将这些字典合并成一个最终的统计结果。我们使用 reduce 函数来实现这个过程。reduce 会依次将两个字典合并,并将同一单词的计数值叠加。

首先,定义一个叠加函数:

def f(dict0, dict1):key = list(dict1.items())[0][0]  # 获取dict1的keyvalue = list(dict1.items())[0][1]  # 获取dict1的value# 将同一单词的计数累加dict0[key] = dict0.get(key, 0) + valuereturn dict0

然后,我们使用 reduce 函数来合并所有字典:

from functools import reduceresult = reduce(f, map_lst)
print(result)

输出结果是:

{'hello': 2, 'world': 2, 'java': 2, 'javaScript': 2, 'html': 2, 'css': 2, 'python': 2}

步骤 4:综合使用 map 和 reduce

我们也可以将 map 和 reduce 结合在一行中直接实现:

result = reduce(f, map(lambda item: {item: 1}, str1.split(' ')))
print(result)

输出结果与上面相同:

{'hello': 2, 'world': 2, 'java': 2, 'javaScript': 2, 'html': 2, 'css': 2, 'python': 2}

总结

通过使用 Python 中的 map 和 reduce 函数,我们可以轻松地统计字符串中每个单词的出现次数。主要步骤包括:

使用 split() 方法将字符串拆分为单词列表。
使用 map 函数将每个单词转化为字典 {单词: 1}。
使用 reduce 函数将所有字典合并并叠加同一单词的计数值。
这种方法简洁且高效,适用于大部分统计单词出现次数的场景。


创作不易,如果这篇博客对你有帮助,劳烦三连!如果有任何问题,欢迎在评论区提问。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com