Python基础:用Python统计列表中每个单词出现的次数(split 的使用,for双重循环)

如何用Python统计含多个字符串的列表中每个单词出现的次数?

要从多个字符窜中统计次数的话,我们先来看一个简单的例子:

先从一个字符串中统计每个单词出现的次数。

如字符串:

str=“You may be out of my sight, but never out of my mind.”

为了简化逻辑,我在这里将字符串做一些处理,如下:

str=“You may be out of my sight but never out of my mind”
(将所有的标点全都换成了空格,)

1.首先:

在这里首先要向初学者介绍一个Python常用的一个方法:split()
语法:

str.split(str="", num=string.count(str)).

参数:

str -----分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num -----分割次数。默认为 -1, 即分隔所有。(次数不限)

返回值:

返回分割后的字符串列表

注意:Python 的 split() 方法通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

示例:

str = "Whatever is worth doing is worth doing well"  #这是一个字符串
print(str.split())        # 以空格为分隔符,分割所有
print(str.split(' ', 1 )) # 以空格为分隔符,分隔成两个(从第一个空格开始分割)
print(str.split(' ', 2 )) # 以空格为分隔符,分隔成三个(从第一个空格开始分割)
#......

运行结果:

[‘Whatever’, ‘is’, ‘worth’, ‘doing’, ‘is’, ‘worth’, ‘doing’, ‘well’]
[‘Whatever’, ‘is worth doing is worth doing well’]
[‘Whatever’, ‘is’, ‘worth doing is worth doing well’]
#…

2.继续:

现在,我们已经了解了关键的方法,现在我们会到最初的问题:
对于一个字符串统计每个单词出现的次数。
代码如下:

List=["You may be out of my sight but never out of my mind."]  #定义了只含一个字符串的列表
#根据情况判断,输出应为字典较为合适
dict={}  #定义一个空的字典,在后面的运算中逐步添加数据
keys=List[0].split()  #对列表中的字符串按空格分割
for key in keys: #遍历整个列表
    if key in dict.keys():  #判断当前key是否已经存在
        dict[key]=dict[key]+1  #在当前key的个数上加 1
    else:
        dict[key]=1  #当前key第一次出现
print(dict)

运行结果:

{‘You’: 1, ‘may’: 1, ‘be’: 1, ‘out’: 2, ‘of’: 2, ‘my’: 2, ‘sight’: 1, ‘but’: 1, ‘never’: 1, ‘mind.’: 1}

3.最后:

回到最原始的问题:

如何用Python统计含多个字符串的列表中每个单词出现的次数?

当列表中含有多个字符串时,我们就要用到 for 的双重循环来遍历整个列表,代码如下:

List=["hello you","hello my friends","you are so beautiful","you are a beautiful girl","a good boy"]
dict={}
for list in List:
    keys=list.split(" ")
    for key in keys:
        if key in dict.keys():
            dict[key]=dict[key]+1
        else:
            dict[key]=1
print(dict)

运行结果:

{‘hello’: 2, ‘you’: 3, ‘my’: 1, ‘friends’: 1, ‘are’: 2, ‘so’: 1, ‘beautiful’: 2, ‘a’: 2, ‘girl’: 1, ‘good’: 1, ‘boy’: 1}

猜你喜欢

转载自blog.csdn.net/qq_44700693/article/details/105066418