Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字母出现次数和频率_Python_String_List_Dictionary_Frequency - Fatal编程技术网

Python 字母出现次数和频率

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,

我需要从单词列表中创建字母出现的列表

我的词表是['song'、'boom'、'pow']

我想数一数每个单词中出现的字母,然后按字母顺序将它们列在一个列表中。如果我的单词列表中没有一个字母与字母表中的每个字母匹配,我仍然希望它在列表中打印一个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