[英]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.