首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中统计给定名称(字符串)中每个字符的出现次数,并在不使用dict的情况下以正常格式显示?

如何在python中统计给定名称(字符串)中每个字符的出现次数,并在不使用dict的情况下以正常格式显示?
EN

Stack Overflow用户
提问于 2020-04-02 01:52:11
回答 4查看 75关注 0票数 0

假设我的输入是:

代码语言:javascript
复制
marcel bentok tanaka

输出应为

代码语言:javascript
复制
m-1,a-4,r-1,c-1,l-1,e-2,l-1,b-1,n-2,t-2,o-1,k-2

我不想计算空格,也不想使用dict或导入functions.How,我能以最简单的方式实现这一点吗?请帮帮忙。我试着在网上搜索,但它们都以dict格式显示输出,即{m-1,a-4,r-1,c-1,l-1,e-2,l-1,b-1,n-2,t-2,o-1,k-2}。我刚刚开始学习编码。所以请帮帮忙。提前谢谢。

我试过了

代码语言:javascript
复制
def letter_count(name)
for char in name:
        print(f"{char}-{name.count(char)}")

但是这对输入bob不起作用。

EN

回答 4

Stack Overflow用户

发布于 2020-04-02 02:02:56

仍然使用字典,但以更简单的方式,这是O(n^2)

代码语言:javascript
复制
def count_freq(name):
    x = dict()

    name = name.replace(' ', '')

    for i in name:
        if i in x.keys():
            x[i] += 1
        else:
            x[i] = 1

    b = [f"{k}-{v}" for k, v in x.items()]
    print(",".join(b))

name = input("Please insert your input: ")
count_freq(name)

这是一个初学者风格的O(n)解决方案:

代码语言:javascript
复制
def count_freq(name):
    x = dict()
    name = name.replace(' ', '')

    for i in name:
        try:
            x[i] += 1
        except:
            x[i] = 1

    b = [f"{k}-{v}" for k, v in x.items()]
    print(",".join(b))

name = input("Please insert your input: ")
count_freq(name)

执行时间分析:

代码语言:javascript
复制
#input is 'marcel bentok tanaka'
#string format no-print
theo 9 µs ± 1.37 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
**vn2  4.39 µs ± 157 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)**
vn   6.78 µs ± 1.34 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)

#no string format (counts only)
theo 5.74 µs ± 953 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
**vn2  2.42 µs ± 30 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)**
vn   3.66 µs ± 668 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

#input is a really long text
#string format no-print
theo 20.8 µs ± 1.43 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
vn2  106 µs ± 21.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
**vn   6.06 µs ± 1.04 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)**

#no string format (counts only)
theo 16.6 µs ± 576 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
vn2  83 µs ± 21.2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
**vn   3.22 µs ± 197 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)**
票数 1
EN

Stack Overflow用户

发布于 2020-04-02 01:56:13

您可以尝试这样做:

代码语言:javascript
复制
def count_freq(name):
    name = name.replace(' ','')
    output = ''
    for char in set(name):
        output += (char + '-' + str(name.count(char)) + ',')
    return output

name = input('insert name:')
print(count_freq(name))
票数 0
EN

Stack Overflow用户

发布于 2020-04-02 01:56:37

将其转换为字典,然后以任何您想要的方式将字典转换为字符串。例如,

代码语言:javascript
复制
counts = {}
for char in "abcdefghijklmnopqrstuvwxyz":
    counts[char] = myString.count(char)
for key in counts.keys():
    print(f"{key}-{counts[char]}")

或者,如果你真的讨厌口头语,那就跳过它:

代码语言:javascript
复制
for char in "abcdefghijklmnopqrstuvwxyz":
    print(f"{char}-{myString.count(char)}")

如果不想显示出现次数为零的内容,请将dict解决方案的最后一部分替换为:

代码语言:javascript
复制
for key in counts.keys():
    if counts[char]:
        print(f"{key}-{counts[char]}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60977212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档