Python 字母出现次数和频率
我需要从单词列表中创建字母出现的列表 我的词表是['song'、'boom'、'pow'] 我想数一数每个单词中出现的字母,然后按字母顺序将它们列在一个列表中。如果我的单词列表中没有一个字母与字母表中的每个字母匹配,我仍然希望它在列表中打印一个0 我使用Python 字母出现次数和频率,python,string,list,dictionary,frequency,Python,String,List,Dictionary,Frequency,我需要从单词列表中创建字母出现的列表 我的词表是['song'、'boom'、'pow'] 我想数一数每个单词中出现的字母,然后按字母顺序将它们列在一个列表中。如果我的单词列表中没有一个字母与字母表中的每个字母匹配,我仍然希望它在列表中打印一个0 我使用string.ascii\u小写字母,而不是在字母表中键入26个字符的字符串 我真的不知道该怎么做 然后我需要找出每个单词中出现的字母,以及字母显示在哪个单词中 那么输出应该如下所示: [0, 1, 0, 0, 0, 0, 1, 0, 0, 0,
string.ascii\u小写字母,而不是在字母表中键入26个字符的字符串
我真的不知道该怎么做
然后我需要找出每个单词中出现的字母,以及字母显示在哪个单词中
那么输出应该如下所示:
[0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
'o' in 'song', 'boom', 'pow'
etc.
进程已完成,退出代码为0
流程结束,退出代码为0第一部分可以这样完成:
In [12]: seq = ['song', 'boom', 'pow']
In [13]: c = collections.Counter(''.join(seq))
In [14]: [c.get(l, 0) for l in string.ascii_lowercase]
Out[14]: [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]
关于第二部分,这里有一个提示:
In [23]: [w for w in seq if 'o' in w]
Out[23]: ['song', 'boom', 'pow']
第一部分可以这样做:
In [12]: seq = ['song', 'boom', 'pow']
In [13]: c = collections.Counter(''.join(seq))
In [14]: [c.get(l, 0) for l in string.ascii_lowercase]
Out[14]: [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]
关于第二部分,这里有一个提示:
In [23]: [w for w in seq if 'o' in w]
Out[23]: ['song', 'boom', 'pow']
另一种我觉得很自然的方式:
>>> from string import ascii_lowercase
>>> words= ['song', 'boom', 'pow']
>>> s=''.join(words)
>>> [s.count(c) for c in ascii_lowercase]
[0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]
对于第二部分,只需使用嵌套循环:
for c in ascii_lowercase:
li=[]
for word in words:
if c in word:
li.append(word)
if li:
print '{} in {}'.format(c, ', '.join(li))
印刷品:
b in boom
g in song
m in boom
n in song
o in song, boom, pow
p in pow
s in song
w in pow
另一种我觉得很自然的方式:
>>> from string import ascii_lowercase
>>> words= ['song', 'boom', 'pow']
>>> s=''.join(words)
>>> [s.count(c) for c in ascii_lowercase]
[0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]
对于第二部分,只需使用嵌套循环:
for c in ascii_lowercase:
li=[]
for word in words:
if c in word:
li.append(word)
if li:
print '{} in {}'.format(c, ', '.join(li))
印刷品:
b in boom
g in song
m in boom
n in song
o in song, boom, pow
p in pow
s in song
w in pow
@Vyktor这与你最近回答的另一个问题(如果你能帮忙?@Vyktor这与你最近回答的另一个问题(如果你能帮忙的话)是一致的?为什么不只是collections.Counter(''.join(seq))
,这在概念上要短得多,简单得多,而且可能更快?我不确定我是否理解字符串中l的。ascii_小写的表达式。你能用另一种方式写它而不把for循环放在里面吗@NPE@perkypanda:循环所做的就是依次将string.ascii_小写
的每个字母分配给l
。好的,谢谢!如果我想对这个事件进行计算,比如说把它转换成一个频率(通过调用另一个函数来计算),我该如何把它附加到你的c.get(l,0)
?我可以执行c.get(function(),0)
吗?或者该符号不能按字母顺序工作吗@NPE为什么不仅仅是collections.Counter(''.join(seq))
,这在概念上要短得多,更简单,而且可能更快?我不确定我是否理解字符串中l.ascii\U小写的表达式。你能用另一种方式写它而不把for循环放在里面吗@NPE@perkypanda:循环所做的就是依次将string.ascii_小写
的每个字母分配给l
。好的,谢谢!如果我想对这个事件进行计算,比如说把它转换成一个频率(通过调用另一个函数来计算),我该如何把它附加到你的c.get(l,0)
?我可以执行c.get(function(),0)
吗?或者该符号不能按字母顺序工作吗@NPE