python输入字符串str输出第m个只出现过n次的字符_Python-统计字符串中每个字符的出现频率及其在字符串中位置...

2020年1月16日

|

by YoungTimes

|

No comments

Python-统计字符串中每个字符的出现频率及其在字符串中位置

1、使用collections.Counter()统计字符串中每个字符出现的频率

collections.counter(iterable-or-mapping)

collections.Counter()接收一个可迭代的实体(Iterable Entity),输出以Entity中的元素为Key,出现频率(Frequency)为Value的统计结果。

如果collections.Counter()的参数为string,该函数的返回结果就是以string中字符为Key,出现频率(Frequency)为Value的字符频率统计结果。

import collections

mainStr = 'This is a sample string and a sample code. It is a very short string. 001122'

# Counter is a dict sub class that keeps the characters in string as keys and their frequency as value

frequency = collections.Counter(mainStr)

print("Occurrence Count of all characters :")

# Iterate over the dictionary and Print the frequency of each character

for (key, value) in frequency.items():

print("Occurrence Count of ", key, " is : ", value)

输出结果如下:

Occurrence Count of all characters :

Occurrence Count of T is : 1

Occurrence Count of h is : 2

Occurrence Count of i is : 5

Occurrence Count of s is : 8

Occurrence Count of is : 15

Occurrence Count of a is : 6

Occurrence Count of m is : 2

Occurrence Count of p is : 2

Occurrence Count of l is : 2

Occurrence Count of e is : 4

Occurrence Count of t is : 4

Occurrence Count of r is : 4

Occurrence Count of n is : 3

Occurrence Count of g is : 2

Occurrence Count of d is : 2

Occurrence Count of c is : 1

Occurrence Count of o is : 2

Occurrence Count of . is : 2

Occurrence Count of I is : 1

Occurrence Count of v is : 1

Occurrence Count of y is : 1

Occurrence Count of 0 is : 2

Occurrence Count of 1 is : 2

Occurrence Count of 2 is : 2

利用这种方式我们可以字符串中所有字符(包含空格和”.”)的出现次数。如果我们只想统计字符和数字的出现频率以及字符所在的位置,该如何实现呢?

2、利用Regex获得字符串(string)中每个字符(character)的出现频率(Frequency)

# Create a Regex pattern to match alphanumeric characters

regexPattern = re.compile('[a-zA-Z0-9]')

首先我们创建一个正则表达式来匹配字符串和数字字符,然后使用pattern.finditer()在字符串中进行匹配,并记录每个字符出现的次数以及它们出现的频率。

import re

regexPattern = re.compile('[a-zA-Z0-9]')

mainStr = 'This is a sample string and a sample code. It is a very short string. 001122'

# Iterate over all the alphanumeric characters in string (that matches the regex pattern)

# While Iterating keep on updating the frequency count of each character in a dictionary

iteratorOfMatchObs = regexPattern.finditer(mainStr)

frequencyOfChars = {}

indexPositions = {}

for matchObj in iteratorOfMatchObs:

frequencyOfChars[matchObj.group()] = frequencyOfChars.get(matchObj.group(), 0) + 1

indexPositions[matchObj.group()] = indexPositions.get(matchObj.group(), []) + [matchObj.start()]

# Iterate over the dictionary and Print the frequency of each character

for (key, value) in frequencyOfChars.items():

print("Occurrence Count of ", key , " is : ", value , ' & Index Positions : ', indexPositions[key])

程序输出结果:

Occurrence Count of T is : 1 & Index Positions : [0]

Occurrence Count of h is : 2 & Index Positions : [1, 57]

Occurrence Count of i is : 5 & Index Positions : [2, 5, 20, 46, 65]

Occurrence Count of s is : 8 & Index Positions : [3, 6, 10, 17, 30, 47, 56, 62]

Occurrence Count of a is : 6 & Index Positions : [8, 11, 24, 28, 31, 49]

Occurrence Count of m is : 2 & Index Positions : [12, 32]

Occurrence Count of p is : 2 & Index Positions : [13, 33]

Occurrence Count of l is : 2 & Index Positions : [14, 34]

Occurrence Count of e is : 4 & Index Positions : [15, 35, 40, 52]

Occurrence Count of t is : 4 & Index Positions : [18, 44, 60, 63]

Occurrence Count of r is : 4 & Index Positions : [19, 53, 59, 64]

Occurrence Count of n is : 3 & Index Positions : [21, 25, 66]

Occurrence Count of g is : 2 & Index Positions : [22, 67]

Occurrence Count of d is : 2 & Index Positions : [26, 39]

Occurrence Count of c is : 1 & Index Positions : [37]

Occurrence Count of o is : 2 & Index Positions : [38, 58]

Occurrence Count of I is : 1 & Index Positions : [43]

Occurrence Count of v is : 1 & Index Positions : [51]

Occurrence Count of y is : 1 & Index Positions : [54]

Occurrence Count of 0 is : 2 & Index Positions : [70, 71]

Occurrence Count of 1 is : 2 & Index Positions : [72, 73]

Occurrence Count of 2 is : 2 & Index Positions : [74, 75]

3、使用collections.Counter()发现字符串中重复字符(Duplicate Characters)

假设我们有以下字符串:

mainStr = 'This is a sample string and a sample code. It is a very short string. 001122'

我们可以通过collections.Counter()来统计每个字符出现的频率,出现次数超过一次的就是重复字符。

import collections

mainStr = 'This is a sample string and a sample code. It is a very short string. 001122'

listOfDupChars = []

# Counter is a dict sub class that keeps the characters in string as keys and their frequency as value

frequency = collections.Counter(mainStr)

# Iterate over the dictionary and Print the frequency of each character

for (key, value) in frequency.items():

if value > 1:

listOfDupChars.append(key)

print('Duplicate characters ; ', listOfDupChars)

程序输出结果如下:

Duplicate characters ; ['h', 'i', 's', ' ', 'a', 'm', 'p', 'l', 'e', 't', 'r', 'n', 'g', 'd', 'o', '.', '0', '1', '2']

除非注明,否则均为[半杯茶的小酒杯]原创文章,转载必须以链接形式标明本文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值