2015-08-18 70 views
4

我需要通過例如字母 組發現重複的字符數,如果我有一個字符串,s = "hggdsaajhjhajadj",然後我需要算作伯爵重複字符,包括字符串蟒蛇非重複的人的

H-1,G-2,d-1,S-1,A-2,J-1,H-1等

和不{ '一個':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) 

{ '一個':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 

然後,我得到如下:

一個 - 2 d - 1克 - 2小時 - 1的J - 1秒 - 1

能否請您給我一些想法如何解決

+0

這聽起來像運行長度編碼 – quamrana

回答

2

下面的函數指定什麼:

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 
+0

完美。謝謝!! – paddu

3

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返回一個對象,如果你迭代,你得到的關鍵和iterato r超過組元素:

>>> 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'] 
+0

這對我也適用。謝謝 – paddu