Как превратить строку букв в 3 буквенные слова в Python 2.7.1 - PullRequest
1 голос
/ 27 марта 2011

У меня есть строка букв «aaabbbcccdddeeefffggg», которую я хотел бы прочитать как 3-буквенные слова.Например, 'aaa','bbb','ccc'...

Есть ли какой-либо код, который вам известен, который может выполнять эту функцию?

Моя конечная цель - присвоить номера каждому слову, например

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

и иметь выходную позицию слова в предложении с этим значением

, поэтому для предложения 'aaabbbcccdddeeefffggg' слова из трех букв будут 'aaa','bbb','ccc'...

aaa будет 1-й позицией (1), bbb будет 2-й позицией (2), ccc будет 3-й позицией (3)

, поэтому в конечном итоге я получу

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

Я пробовал это в течение нескольких часов, и я не могу понять, как это сделать, поэтому любая помощь будет высоко ценится

спасибо

Ответы [ 4 ]

1 голос
/ 27 марта 2011

Как-то так?

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 голосов
/ 27 марта 2011
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 голосов
/ 27 марта 2011
>>> a = "aaabbbcccdddeeefffggg"
>>> [a[i:i+3] for i in range(0, len(a), 3)]
['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
0 голосов
/ 27 марта 2011
>>> import re
>>> re.findall(".{3}" ,"aaabbbcccdddeeefffggg")
['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
...