繁体   English   中英

计算单个字符串中 char 的出现次数

[英]Count occurrences of char in a single string

string = input(" ")
count = string.count()
print(string + str(count))

需要使用for循环来获取output:ll2a1m1a1

使用itertools中的groupby

>>> from itertools import groupby
>>> s = 'llama'
>>> [[k, len(list(g))] for k, g in groupby(s)]
[['l', 2], ['a', 1], ['m', 1], ['a', 1]]

如果您确实想要您询问的 output ,请尝试以下操作,并按照@DanielMesejo 的建议,使用sum(1 for _ in g)而不是len(list(g))

>>> from itertools import groupby
>>> s = 'llama'
>> groups = [[k, sum(1 for _ in g)] for k, g in groupby(s)]
>>> ''.join(f'{a * b}{b}' for a, b in groups)
'll2a1m1a1'

这适用于您想要的任何单词,假设这个词是“发生”,所以

>>> from itertools import groupby
>>> s = 'happen'
>> groups = [[k, sum(1 for _ in g)] for k, g in groupby(s)]
>>> ''.join(f'{a * b}{b}' for a, b in groups)
'h1a1pp2e1n1'

看,你必须解释更多,这会循环并计算每个字母的次数并将其打印出来。

greeting = 'llama'
for i in range(0, len(greeting)):
    #start count at 1 for original instance.
    count = 1
    for k in range(0, len(greeting)):
        # check letters are not the same position letter.
        if not k == i:
            #check if letters match
            if greeting[i] == greeting[k]:
                count += 1
    print(greeting[i] + str(count))

更基本的方法:

string = 'llama'

def get_count_str(s): 
    previous = s[0]
    for c in s[1:]:
        if c != previous:
            yield f'{previous}{len(previous)}'
            previous = c
        else:
            previous += c


    # yield last
    yield f'{previous}{len(previous)}'

print(*get_count_str(string ), sep='')

output:

ll2a1m1a1

暂无
暂无

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

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