让我们说我有一个字符串'xyxxxyx'
。我想用除{x
和x
(相邻字母)之外的任何其他字母替换中间的y
来组成一个字符串,以便每个相邻的字母都不同。
例如
Input: 'xyxxxyx'
Output: 'xyxzxyx'
我希望这对于任何输入字符串都是通用的。
答案 0 :(得分:0)
这可以解决问题:
a='xyxxxyx'
import string
from random import randint
total=[x for x in list(string.ascii_lowercase) if x not in spil] # gets alphabets a to z in a list except the ones in a
spil=list(a) #spilt the string a in letters
for i in range(len(spil)-1):
if spil[i]==spil[i+1]: #if two consecitive are same then changes the next one with a random alphabet
spil[i]=total[randint(0,len(total))]
print("".join(spil))
输出将是:
'xyczxyx'
答案 1 :(得分:0)
您可以使用正则表达式来做到这一点:
import re
def noDoubles(string):
subChars = set("wxyz")
result = list(string)
for match in re.finditer(r"(.)(\1+)",string):
usedChars = set(string[match.start():match.end()+1])
altChars = list(subChars - usedChars)
size = match.end(2) - match.start(2)
size = size - (size>1)
result[match.start(2):match.start(2)+size] = (altChars[:2]*size)[:size]
return "".join(result)
print(noDoubles("xyxxxyaaabbyyaaaaa")) # "xyxzxyazabzyzazwza"
表达式(。)(\ 1+)查找字符串重复字符的第一个字符和随后的重复字符。遍历匹配项将使您可以用交替的字符模式替换该后续部分,该字符既不是重复的字符也不是重复的字符。您需要使用交替模式进行替换,以免创建新的重复。
请注意,我们只需要使用4个替换字符,因为重复的字符和下一个字符要么是4个字符中的一个或两个(剩下两个用于替代),要么都不是(这使我们可以使用任何4个中的2个。
答案 2 :(得分:0)
这是使用groupby
模块中的itertools
解决问题的一种方法:
from itertools import groupby
def rep_adj(data, char='z'):
for _, v in groupby(data):
b = list(v)
if len(b) > 0:
for i, j in enumerate(b):
yield char if not i%2==0 else j
data = 'xyxxxyx'
out = ''.join(rep_adj(data))
print(out)
输出:
'xyxzxyx'