python如果含有两个相同字母,如何将其中一个替换成其他字符

2025-04-12 23:09:33
推荐回答(2个)
回答(1):

采取的算法是:将第一和除其之外的每个字母对比,相同即记下替换后的word,依次下推(第二和第三、第四。。。),逐个修改映射list

# coding:utf8

if __name__ == '__main__':
words = ['school','google','getfileinfo','cherrypy','pypy']
print words
tmps = words #映射list,存放替换大小写后的list
index = 0 #list遍历到第几个了
for wds in words: #遍历words
i = 0 #记录list下的每个word长度
j = 0 #记录每个word有几个相同的字母数
#下面采取的算法是:将第一和除其之外的每个字母对比,相同即记下替换后的word,依次下推(第二和第三、第四。。。),逐个修改映射list:tmps
for wd_a in wds[i:]:
for wd_b in wds[i+1:]:
if wd_a == wd_b:
# print wds, wd_a.upper()
j += 1
if j > 1: #相同字母超过一个的,需要沿用之前修改好的word,否则最后记录的将是最后一个相同字母转大写的word
tmp = tmp.replace(wd_a, wd_a.upper(), 1)
else:
tmp = wds.replace(wd_a, wd_a.upper(), 1)
# print tmp
tmps[index] = tmp  #修改映射list:tmps

i += 1
index += 1
print tmps

 运行结果:

['school', 'google', 'getfileinfo', 'cherrypy', 'pypy']

['schOol', 'GOogle', 'gEtFIleinfo', 'cheRrYpy', 'PYpy']


算法二:

# coding:utf8

if __name__ == '__main__':
words = ['school','google','getfileinfo','cherrypy','pypy']
print words
tmps = words #映射list,存放替换大小写后的list
#算法二
#下面采取的算法是:先将单词序列化,然后排序,接着采取两两相比较,减少比较次数,同时遇到相同字母的就跳到下一组对比
index = 0
for word in words:
letters = []
for wd in word:
letters.append(wd)
letters.sort()
# print letters
j = 0
flag = False
for i in range(len(letters)-1):
if flag:
flag = False #重置跳过标记
continue #第一和第二位字母相同,那就没必要再比较第二和第三位字母了,直接跳过比较第三和第四位字母
# print letters[i],letters[i+1]
if letters[i] == letters[i+1]:
j += 1
if j > 1:
tmp = tmp.replace(letters[i], letters[i].upper(), 1)
else:
tmp = word.replace(letters[i], letters[i].upper(), 1)
# print tmp
tmps[index] = tmp
flag = True #jump flag
index += 1
print tmps


测试了下运行时间,words在145个时,运行时间对比:

Time2: 0.0160000324249

Time2: 0.0150001049042

Time2: 0.0149998664856


Time1: 0.0160000324249

Time1: 0.0159997940063

Time1: 0.0150001049042

可见算法二的最少运行时间比算法一少,要快

回答(2):

'school'.replace('o', 'O', 1) #只替换一次, replace第三个参数代表替换的次数