删除字符串中相邻的重复字符

时间:2019-03-19 11:29:10

标签: python string

我想删除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

4 个答案:

答案 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)

您可以使用itertoolschar个角色分组,例如

>>> 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'

首先创建一个符合特定条件的字母列表,然后将该列表转换为字符串。该算法可用于许多不同的条件。

请注意,您不需要导入任何新库。