用Python统计字符串中字符数量的6种方法

您所在的位置:网站首页 用数组统计各种字符个数 用Python统计字符串中字符数量的6种方法

用Python统计字符串中字符数量的6种方法

2023-03-23 03:11| 来源: 网络整理| 查看: 265

一、问题的提出1.题目要求

看到Python群有网友提问以下问题:

接收输入的字符,统计每一个字符在字符串中的数量,然后进行格式化输出,题目见下方:题目2. 现有源码:L=input() #输入一个字符串counts={}for word in L:# 请在此处输入一行或者多行代码for i in counts: print('{} {}'.format(i,counts[i]))二、分析问题

本题是考察Python最基本的循环、统计、格式化输出等内容,涉及字符串、字典、数字等数据结构。本题实质在于如何统计列表中的元素个数,我们用以下几种方法来解决:

1.字典法(四行代码)L=input() #输入一个字符串 counts={} # 定义一个字典 for word in L: if word in counts:# 判断字符是否已经在字典中 counts[word]+=1 #如果在字典中就加1,不在则键值还是1 else: counts[word]=1 for i in counts: print('{} {}'.format(i,counts[i]))示例1 2.字典优化法(二行代码)L=input() # 输入一个字符串 counts={} for word in L: counts[word]=counts.get(word,0)+1 for i in counts: print('{} {}'.format(i,counts[i]))示例2 3. 列表推导式(三行代码)

撇开题目本身,我们可以用列表推导式实现字符串中字符的快速统计,代码如下:

L=input() # counts={word:L.count(word) for word in set(L)} for k,v in counts.items(): print(k,v)示例34. 使用Counter

collections中自带一个统计功能的Counter,它可以生成一个字典,非常方便。我们编写以下代码:

from collections import Counter #导入Counter L=input() a=Counter(L) # 生成一个实例,并赋值给a for k,v in a.items(): # 循环打印出来a中的内容。 print(k,v)示例45. 字典列表推导式

采用字典推导式相对更简洁,原理是生成生一个字典,再调用字典中的内容:

s = input() dic={i:s.count(i) for i in s} [print(j,dic[j]) for j in dic]

当然上述代码也可以简化为二行代码,更为简洁,但是理解起来没有上面的容易。

s = input() [print(j,{i:s.count(i) for i in s}[j]) for j in {i:s.count(i) for i in s}]示例56. 采用NLTK工具包[1]

NLTK是一款自然语言处理工具包,内置非常多的语方处理工具,可以很方便的使用,我们编写以下代码:

from nltk import FreqDist L=input() freq = FreqDist(L) for key,value in freq: print(key,value)三、学后反思我们可以采取多种办法来解决字符统计的问题,当然最简单、最实用的就是采用字典或列表推导式,这也是计算机等级考试中常考的内容。当然如果你了解NLTK, Counter等工具,也可以简化思路和算法。由于Counter是Python的内置工具包,只用导入就可以用,所以也推荐使用这个现成的轮子,简化算法。字典和列表推导式是Python中非常重要的数据结构和处理问题的方法,功能也非常强大,大家在日常学习中好好学习体会和把握,一定要通过实践操作来加深自己的理解。学习Python贵在坚持,并善于总结和归纳,以项目为导向,综合运用各种方法来解决同一个问题,这样才能更好地学习Python。

我是PythonFan,一个热爱翻译和编程的文科生,欢迎关注我,带给你不一样的学习体验。

参考内容:

[1]

参考^abPython统计字符/单词/汉字个数(字典)的三种方法 https://blog.csdn.net/henanlion/article/details/121988457


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3