繁体   English   中英

重复字符的计数,包括字符串python中的非重复字符

[英]Count of repeated characters including the non-repeated ones in a string python

我需要通过字母组找到重复字符的计数,例如,如果我有一个字符串, s = "hggdsaajhjhajadj" ,那么我需要计数为

h-1,g-2,d-1,s-1,a-2,j-1,h-1等

而不是{'a':4,'d':2,'g':2,'h':3,'j':4,'s':1}

以下代码给出了我的计数。

s = "hggdsaajhjhajadj"
def find_repeated(string):
    table = {}
    for char in string.lower():
        if char in table:
            table[char] += 1
        elif char != " ":
            table[char] = 1
        else:
            table[char] = 0
    return table

print find_repeated(s)

{'a':4,'d':2,'g':2,'h':3,'j':4,'s':1}

如果我尝试以下,

 for c in sorted(set(s)):
       i = 1; 
       while c * i in s:
           i += 1
       print c, "-", i - 1

然后,我得到以下内容:

a - 2 d - 1 g - 2 h - 1 j - 1 s - 1

能告诉我一些我如何解决的问题

Python用于处理连续组的工具是itertools.groupby

>>> from itertools import groupby
>>> s = "hggdsaajhjhajadj"
>>> [(k, len(list(g))) for k,g in groupby(s)]
[('h', 1), ('g', 2), ('d', 1), ('s', 1), ('a', 2), ('j', 1), ('h', 1), ('j', 1), ('h', 1), ('a', 1), ('j', 1), ('a', 1), ('d', 1), ('j', 1)]

groupby返回一个对象,如果你迭代,你得到组元素上的键和迭代器:

>>> grouped = groupby(s)
>>> for key, group in grouped:
...     print(key, list(group))
...     
h ['h']
g ['g', 'g']
d ['d']
s ['s']
a ['a', 'a']
j ['j']
h ['h']
j ['j']
h ['h']
a ['a']
j ['j']
a ['a']
d ['d']
j ['j']

以下函数执行您指定的操作:

def mycount(s):
        i = 0
        res = []
        while i<len(s):
                j = i+1
                while j<len(s) and s[i] == s[j]:
                        j += 1
                res.append( (s[i],j-i) )
                i = j
        return res

暂无
暂无

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

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