2011-03-27 90 views
0

我有一串字母'aaabbbcccdddeeefffggg',我想將其讀作3個字母的單詞。例如,'aaa','bbb','ccc'...如何在Python中將字符串轉換爲3個字母的單詞2.7.1

是否有任何代碼可以完成此功能?

我的最終目標是編號分配給每一個字就像

aaa= 123 
bbb= 234 
ccc= 356 ... 

,並具有輸出是單詞在句子中的位置與價值

所以對於「aaabbbcccdddeeefffggg」的句子 三個字母的單詞將是'aaa','bbb','ccc'...

aaa將是第一位置(1),bbb將是第二位置(2),ccc將是第三位(3)

所以最終我會得到

(1,123),(2,234),(3,356) for 'aaa','bbb','ccc' 

我一直在嘗試這幾個小時,我無法弄清楚如何做到這一點,因此任何幫助,將不勝感激

謝謝

+3

這是功課? – tkerwin 2011-03-27 02:37:18

+0

你如何給單詞分配數字?一本字典? – julkiewicz 2011-03-27 02:38:28

+0

如果這不是一本字典,問題是我猜'ggg = 789'後面會出現什麼問題 – julkiewicz 2011-03-27 02:45:08

回答

1
>>> a = "aaabbbcccdddeeefffggg" 
>>> [a[i:i+3] for i in range(0, len(a), 3)] 
['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg'] 
+0

這幫了很多 – 2011-04-10 04:02:34

1

是這樣的?

data = 'aaabbbcccdddeeefffggg' 
trans = {'aaa': 123, 'bbb': 234, 'ccc': 356, ...} 
[(x + 1, trans[y * 3]) for x, y in enumerate(data[::3])] 

否則:

def trans(c): 
    a = ord('a') 
    return ord(c) - a + 3 + 10 * (ord(c) - a + 2) + 100 * (ord(c) - a + 1) 

data = 'aaabbbcccdddeeefffggg' 
[(x + 1, trans(y)) for x, y in enumerate(data[::3])] 
0
>>> import re 
>>> re.findall(".{3}" ,"aaabbbcccdddeeefffggg") 
['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg'] 
0
ch = 'bbbiiieeefffhhhaaacccddd' 

d = dict(zip(('aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii'), 
      ('123','234','345','456','567','678','789','8910','91011'))) 

def lect(x): 
    gen = iter(x) 
    while True: 
     yield ''.join((gen.next(),gen.next(),gen.next())) 

print [ (i+1,d[x]) for i,x in enumerate(lect(ch)) ] 

import re 

ch = 'bbbiiieeefffhhhaaacccddd' 

d = dict(zip(('aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii'), 
      ('123','234','345','456','567','678','789','8910','91011'))) 

pat = re.compile('|'.join(d.iterkeys())) 

print [ ((mat.start()/3)+1,d[mat.group()]) for mat in pat.finditer(ch) ] 
+0

第二個幫助非常感謝! – 2011-04-10 04:07:53

相關問題