我想删除Python 3中字符串中相邻的重复字符。例如,如果输入为AABBC
,则输出为ABC
;如果输入为AAABBBCC
,则输出为{ {1}}。我做了两次尝试来解决这个问题。
尝试#1
ABC
上面的代码返回输入的相同字符串。如果输入string = input()
for i in range (len(string) - 1):
if string[i] == string[i+1]:
string.replace(string[i],"")
print(string)
,它只会返回相同的字符串。不知道自己在做什么错,我尝试了另一次尝试。
尝试#2
AABBC
上面的代码适用于双重复字符,但是当有3个或更多重复字符时失败。如果我输入string = input()
new = []
for i in string:
new.append(i)
for i in range (len(new) - 3):
"""in the above line, if I set the range to (len(new)-2), it gives me an
error saying "list index out of range"."""
if new[i] == new[i+1]:
new.pop(i)
print(new)
,它将返回列表AABBC
,这是完全可以的,但是使用输入['A','B','C']
,它将返回AAABBCC
。
答案 0 :(得分:0)
使用正则表达式:
import re
s = ["AABBC", "AAABBBCC"]
for i in s:
print( re.sub(r"(.)\1+", r"\1", i) )
或:
s = ["AABBC", "AAABBBCC"]
for i in s:
temp = []
for j in i:
if not temp:
temp.append(j)
else:
if temp[-1] != j:
temp.append(j)
print("".join(temp))
输出:
ABC
ABC
答案 1 :(得分:0)
您可以使用itertools
将char
个角色分组,例如
>>> import itertools
>>> [x[0] for x in itertools.groupby('AABBCC')]
['A', 'B', 'C']
答案 2 :(得分:0)
bc <<< $(awk 'BEGIN{ print "ibase=10; obase=2"}1' file)
也就是说,仅在结果字符串末尾还没有字母时才附加字母。
答案 3 :(得分:0)
一个易于理解的简短解决方案:
mot = 'AABBBCC'
a = [mot[0]] + [mot[i] if mot[i]!=mot[i-1] else '' for i in range(1, len(mot))]
>>> ['A', '', 'B', '', '', 'C', '']
result = ''
for lettre in a:
result += lettre
result
>>> 'ABC'
首先创建一个符合特定条件的字母列表,然后将该列表转换为字符串。该算法可用于许多不同的条件。
请注意,您不需要导入任何新库。