将字符串拆分为相同字母的块

时间:2016-07-27 15:29:22

标签: python string split

这很容易,我就是做不到!在这个例子中,我想要做的就是将下面的字符串拆分成彼此相邻的相同字母的块,例如在下面的示例中:test =“AAATGG”,将分为“AAA”,“T”,“GG”。我一直在尝试不同的方式,下面是一个例子。我很感激你的帮助。

我知道这个想法是通过字符串,如果下一个字母与当前字母相同,继续,否则,打破并打印并重新开始,我只是无法正确实现它。

ObjectAnimator scaleX = ObjectAnimator.ofFloat(img1, "scaleX", (float) img2.getWidth());
    ObjectAnimator scaleY = ObjectAnimator.ofFloat(img1, "scaleY", (float) img2.getHeight());
    scaleX.setDuration(2000);
    scaleY.setDuration(2000);
    AnimatorSet scale = new AnimatorSet();
    scale.play(scaleX).with(scaleY);
    scale.start();

4 个答案:

答案 0 :(得分:2)

一种方法是使用groupby中的itertools

from itertools import groupby
[''.join(g) for _, g in groupby(test)]
# ['AAA', 'T', 'GG']

答案 1 :(得分:1)

我可能只是使用itertools.groupby

>>> import itertools as it
>>> s = 'AAATGG'
>>> for k, g in it.groupby(s):
...   print(k, list(g))
... 
('A', ['A', 'A', 'A'])
('T', ['T'])
('G', ['G', 'G'])
>>>
>>> # Multiple non-consecutive occurrences of a given value.
>>> s = 'AAATTGGAAA'
>>> for k, g in it.groupby(s):
...   print(k, list(g))
... 
('A', ['A', 'A', 'A'])
('T', ['T', 'T'])
('G', ['G', 'G'])
('A', ['A', 'A', 'A'])

如您所见,g成为一个可迭代的,它产生给定字符(k)的所有连续出现。我使用list(g)来使用迭代,但你可以用它做任何你喜欢的事情(包括''.join(g)来获取字符串,或sum(1 for _ in g)来获取计数。)

答案 2 :(得分:1)

您可以使用正则表达式:

>>> re.findall(r'((\w)\2*)', test)
[('AAA', 'A'), ('T', 'T'), ('GG', 'G')]

答案 3 :(得分:1)

您也可以使用regex.findall。在这种情况下,我假设只有字母A,T,C和G存在。

import re
re.findall('(A+|T+|G+|C+)', test)
['AAA', 'T', 'GG']