2011-03-27 92 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

相关问题