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

Python 如何获取列表中特定字符的频率?,python,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

我对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
我如何操作计数器以仅计算姓氏中的第二个字母?非常感谢您的帮助。

使用str.rsplit将名称从末尾拆分一次,如果返回列表的长度大于1,则使用其最后一项:

str.rsplit示例:

演示:


做两次劈叉可能不是最好的,但这是我想到的第一件事

>>> Counter([x.split()[1][1] for x in nameList if len(x.split()) > 1])
您可以使用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))

好的,非常感谢你!!!另外,如果我想得到姓氏的第一个字母,我会在nameFreq x.rsplitNone中使用Countery[0][1]表示y,如果leny>1,则在nameFreq中使用1表示x。@mikez1使用y[-1][0]。好的,我将计数设置为变量c。如果我想打印计数器的输出,我可以使用for循环,例如c:print x,c[x]中的for x,而不是计数器{'o':2,'a':1}@mikez1,您也可以这样做:在c.iteritems中为k,v
>>> Counter([x.split()[1][1] for x in nameList if len(x.split()) > 1])
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))