Python 插入“;X";在字符串中相同的连续字母之间
给定一个字符串,我如何将其分解,使得在n,n+1处没有连续的相同字母,其中n是偶数 意思是,我怎样才能让“abba”保持“abba”,而把“abbb”变成“abbXb”Python 插入“;X";在字符串中相同的连续字母之间,python,Python,给定一个字符串,我如何将其分解,使得在n,n+1处没有连续的相同字母,其中n是偶数 意思是,我怎样才能让“abba”保持“abba”,而把“abbb”变成“abbXb” 谢谢,凯文,做你自己的家庭作业 def foo(text, separator): if len(text) < 2: return text result = "" for i in range(1, len(text), 2): if text[i] == te
谢谢,凯文,做你自己的家庭作业
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"))
您可以使用
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
>> abba
>> abbXba
>> abbababababZbbaaZaa
ab -> ab
abba -> abba
abbb -> abbXb
abbba -> abbXba
abbababababbbaaaa -> abbababababXbbaaXaa
abcacbbbddbabbdd -> abcacbbXbdXdbabXbdXd
愿它好吗
from itertools import izip_longest
def X(s):
s_odd = s[::2]
s_even = s[1::2]
output = ''
for o, e in izip_longest(s_odd, s_even):
output += o or ''
if o == e:
output += 'X'
output += e or ''
return output
strings = ['ab', 'abba', 'abbb', 'abbba', 'abbababababbbaaaa', 'abcacbbbddbabbdd']
for s in strings:
print X(s)
结果:
ab
abba
abbXb
abbXba
abbababababXbbaaXaa
abcacbbXbdXdbabXbdXd
编辑
更简单的版本:
def X(s):
output = ''
for i in range(0, len(s), 2):
o = s[i]
e = s[i+1] if i < len(s) - 1 else ''
output += o
if o == e:
output += 'X'
output += e
return output
strings = ['ab', 'abba', 'abbb', 'abbba', 'abbababababbbaaaa', 'abcacbbbddbabbdd']
for s in strings:
print X(s)
def X(s):
输出=“”
对于范围内的i(0,len(s),2):
o=s[i]
如果i
n是否从0开始?还有,你尝试过什么?你期望从“AAAAA”中得到什么结果?