我是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
如何操纵计数器才能只反击姓氏中的第二个字母?任何帮助表示赞赏。
答案 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))