如何在Python 2.7.1中将字母字符串转换为三个字母的单词

1 投票
4 回答
2014 浏览
提问于 2025-04-16 14:30

我有一串字母 'aaabbbcccdddeeefffggg',我想把它分成每三个字母为一组的单词。比如说,'aaa','bbb','ccc'...

你知道有没有什么代码可以实现这个功能吗?

我的最终目标是给每个单词分配一个数字,比如说

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'

我已经尝试了几个小时,但还是搞不定,所以任何帮助都非常感谢

谢谢

4 个回答

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) ]
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

当然可以!请看下面的内容:

在编程中,有时候我们需要处理一些数据,比如从一个地方获取信息,然后在另一个地方使用这些信息。这个过程就像是把水从一个水桶倒到另一个水桶里。我们需要确保水不会洒出来,也就是要确保数据在转移过程中不会丢失。

为了做到这一点,程序员通常会使用一些工具和方法来帮助他们管理这些数据。比如,使用变量就像是给水桶贴上标签,这样我们就知道每个水桶里装的是什么。

此外,还有一些特定的规则和步骤,帮助我们在处理数据时保持整洁和有序。就像在厨房做饭时,我们会先准备好所有的材料,然后按照食谱一步一步来,这样才能做出美味的菜肴。

总之,编程就像是一个复杂的拼图游戏,我们需要把不同的部分组合在一起,才能完成一个完整的作品。

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

撰写回答