繁体   English   中英

Python - 计算字符串中的字母频率

[英]Python - Counting Letter Frequency in a String

我想写下每个字符串的字母频率。 我的输入和预期输出是这样的。

"aaaa" -> "a4"
"abb" -> "a1b2"
"abbb cc a" -> "a1b3 c2 a1"
"bbbaaacddddee" -> "b3a3c1d4e2"
"a   b" -> "a1 b1"

我找到了这个解决方案,但它以随机顺序给出了频率。 我怎样才能做到这一点?

这是否满足您的需求?

from itertools import groupby
s = "bbbaaac ddddee aa"

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
res1 = "".join("{}{}".format(label, count) for label, count in result)
# 'b3a3c1 1d4e2 1a2'

# spaces just as spaces, do not include their count
import re
re.sub(' [0-9]+', ' ', res1)
'b3a3c1 d4e2 a2'

对我来说,乍一看有点棘手。 例如,看起来"bbbaaacddddee" -> "b3a3c1d4e2"需要按传入字符串中出现的顺序输出计数结果:

import re

def unique_elements(t):
    l = []
    for w in t:
        if w not in l:
            l.append(w)
    return l

def splitter(s):
    res = []
    tokens = re.split("[ ]+", s)
    for token in tokens:
        s1 = unique_elements(token) # or s1 = sorted(set(token))
        this_count = "".join([k + str(v) for k, v in list(zip(s1, [token.count(x) for x in s1]))])
        res.append(this_count)
    return " ".join(res)

print(splitter("aaaa"))
print(splitter("abb")) 
print(splitter("abbb cc a"))
print(splitter("bbbaaacddddee")) 
print(splitter("a   b")) 

OUTPUT

a4
a1b2
a1b3 c2 a1
b3a3c1d4e2
a1 b1

如果出现的顺序不是真正的交易,您可以忽略unique_elements function 并简单地在splitter中替换类似s1 = sorted(set(token))的内容,如评论中所示。

here is you answer
test_str = "here is your answer"
res = {}
list=[]
list=test_str.split()
# print(list)
for a in list:
    res={}
    for keys in a:
        res[keys] = res.get(keys, 0) + 1
    for key,value in res.items():
        print(f"{key}{value}",end="")
    print(end=" ")

无需迭代每个单词中的每个字符。
这是一个替代解决方案。 (如果您不想使用 itertools,那看起来很整洁。)

def word_stats(data: str=""):
    all = []
    for word in data.split(" "):
        res = []
        while len(word)>0:
            res.append(word[:1] + str(word.count(word[:1])))
            word = word.replace(word[:1],"")
        res.sort()
        all.append("".join(res))
    return " ".join(all)

print(word_stats("asjssjbjbbhsiaiic ifiaficjxzjooro qoprlllkskrmsnm mmvvllvlxjxj jfnnfcncnnccnncsllsdfi"))
print(word_stats("abbb cc a"))
print(word_stats("bbbaaacddddee"))

这将是 output:

c5d1f3i1j1l2n7s2  
a1b3 c2 a1  
a3b3c1d4e2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM