簡體   English   中英

如何從字符串中刪除兩個連續的相同字符?

[英]How do I remove two consecutive same characters from a string?

我正在嘗試從字符串中連續刪除相同的字符。 例如:

         abb --> ab
         aaab --> ab
         ababa --> ababa (since no two consecutive characters are same)

我的代碼:

T=int(input())
l=[0]
S1=""
for i in range(T):
    S=input()
    for j in range(len(S)-1):
        if S[j]!=S[j+1]:
            if S[j] != l[len(l)-1]:
                l=[]
                l.append(S[j])
                l.append(S[j+1])
                print(l)

            for k in l:
                S1+=k
            

    print(S1)
    S1=""
    l=[0]

該代碼不適用於第三種情況( ababa )。 我該如何解決?

一種簡潔的方法是使用itertools.groupby

from itertools import groupby

def clean(s):
    return ''.join(k for k, _ in groupby(s))

>>> clean("abb")
'ab'
>>> clean("aaab")
'ab'
>>> clean("ababa")
'ababa'

一種相當簡化的基於二次循環的方法(注釋中的線性):

def clean(s):
    res = ""  # res = []
    for c in s:
        if not res or res[-1] != c:
            res += c  # res.append(c)
    return res  # return ''.join(res)

如果字符串很大,那么一種冗長的方法可能不是最有效的:

value = 'aaaaaabbbbaaaaaacdeeeeefff'

def no_dups(value):
    r = ''
    for i in value:
        if not r or r[-1] != i:
            r += i
    return r

print(no_dups(value))
# abacdef

使用正則表達式,我們可以做re.sub(r'([az])\1+', r'\1', string_data)

import re

test_data = 'abb aaab ababa'.split()

for data in test_data:
    print(f"{data} -->", re.sub(r'([a-z])\1+', r'\1', data))

出來這個代碼,工作正常:

T=int(input())      #No of testcases; for testing multiple strings
S1=""
for i in range(T):
    S=input()
    for j in range(0,len(S),2):
        if j!=len(S)-1:
            if S[j]!=S[j+1]:
                S1+=S[j]
                S1+=S[j+1]
        else:
            if S1[len(S1)-1]!=S[j]:
                S1+=S[j]

    print(S1)
    S1=""
  

您可以將正則表達式用作:

for char in set(string):
    string = re.sub(f'{char}+', char, string)
string

結果是

 abb --> ab
 aaab --> ab
 ababa --> ababa

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM