如何获取列表中特定字符的频率?

时间:2013-09-27 03:57:36

标签: python

我是Python的新手。我有一个名称列表(第一个和最后一个)作为我的文本文件中的字符串到python中的列表。我想弄清楚如何获得列表中所有名称的姓氏中第二个字母的频率。

以下是我姓名列表中的例子:

['Name', 'Allen Doe', 'Jane Doe', 'Larry Hackman']

从该列表中,a的频率应为1,而o的频率应为2.

这是我到目前为止所拥有的:

 n = open('name.txt', 'r')
    with open('name.txt', 'r') as n:
 nameList  = [line.strip() for line in n]
 print nameList

 from collections import Counter
     nameFreq = Counter(nameList)

 print "The frequency of the second letter in last name is"
 print nameFreq

如何操纵计数器才能只反击姓氏中的第二个字母?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

如果返回列表的长度为>,请使用str.rsplit将名称从末尾拆分一次。 1然后使用它的最后一项:

str.rsplit示例:

>>> 'foo bar spam'.rsplit(None, 1)
['foo bar', 'spam']

<强>演示:

>>> from collections import Counter
>>> lis = ['Name', 'Allen Doe', 'Jane Doe', 'Larry Hackman']
>>> Counter(y[-1][1] for y in (x.rsplit(None, 1) for x in lis) if len(y)>1)
Counter({'o': 2, 'a': 1})

答案 1 :(得分:0)

做两次分裂可能不是最佳选择,但这是我想到的第一件事。

>>> Counter([x.split()[1][1] for x in nameList if len(x.split()) > 1])

答案 2 :(得分:0)

您可以使用str.partition方法和字符串切片:

from collections import Counter

with open('name.txt') as file:
    names = [line.strip() for line in file]

# 'foo bar spam' -> 'bar spam'
lastnames = (name.partition(' ')[2] for name in names) 
i = 1 # 2nd character
freq = Counter(name[i:i+1] for name in lastnames)
print("\n".join("%s: %d" % (char, n) for char, n in freq.most_common() if char))