在字符串中相同的连续字母之间插入“X”

2024-10-02 22:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个字符串,我怎样才能把它分解成在n,n+1处没有连续的相同字母,其中n是偶数。你知道吗

意思是,我怎样才能让“abba”保持“abba”,而把“abbb”变成“abbXb”。你知道吗

谢谢


Tags: 字符串字母偶数分解成abbaabbbabbxb
3条回答

做你自己的作业,凯文。你知道吗

def foo(text, separator):
    if len(text) < 2:
        return text

    result = ""
    for i in range(1, len(text), 2):
        if text[i] == text[i - 1]:
            result += text[i - 1] + separator + text[i]
        else:
            result += text[i-1:i+1]

    if len(text) % 2 != 0:
        result += text[-1]

    return result

print(foo("ab", "X"))
print(foo("abba", "X"))
print(foo("abbba", "X"))
print(foo("abbababababbbaaaa", "Z"))

输出:

>> ab
>> abba
>> abbXba
>> abbababababZbbaaZaa

您可以使用itertools.groupby

from itertools import islice, groupby
import math
def solve(strs, n):
    for k, g in groupby(strs):
        lis = list(g)
        it = iter(lis)
        yield 'X'.join(''.join(islice(it, n)) for _ in xrange(int(math.ceil(len(lis)/float(n)))))

演示:

>>> ''.join(solve("abba", 2))
'abba'
>>> ''.join(solve("abbb", 2))
'abbXb'
>>> ''.join(list(solve('abbbbyyyyy', 2)))
'abbXbbyyXyyXy'
>>> ''.join(solve('abbbbyyyyy', 4))
'abbbbyyyyXy'

因为每个人都喜欢一句话:

strings = ['ab', 'abba', 'abbb', 'abbba', 'abbababababbbaaaa', 'abcacbbbddbabbdd']

for s in strings:
    r = ''.join('X' + v if (k and k % 2 and v == s[k - 1]) else v for (k,v) in enumerate(s))
    print s, '->', r

代码如下:查看字符串中的每个字符。如果不是第一个,并且索引是偶数,并且与前面的字符相同,则在字符前面加上'X'。你知道吗

输出:

ab -> ab
abba -> abba
abbb -> abbXb
abbba -> abbXba
abbababababbbaaaa -> abbababababXbbaaXaa
abcacbbbddbabbdd -> abcacbbXbdXdbabXbdXd

相关问题 更多 >