[英]Remove N consecutive repeated characters in a string
我正在嘗試解決用戶輸入字符串說str =“ aaabbcc”和整數n = 2的問題。
因此,該函數應該從str中刪除出現“ n”次的字符,並僅輸出“ aaa”。
我嘗試了幾種方法,但無法獲得正確的輸出。 是否有我可以使用的任何正則表達式函數或任何遞歸函數或僅是普通的舊迭代。
提前致謝。
使用itertools.groupby
例如:
from itertools import groupby
s = "aaabbcc"
n = 2
result = ""
for k, v in groupby(s):
value = list(v)
if not len(value) == n:
result += "".join(value)
print(result)
輸出:
aaa
from collections import Counter
counts = Counter(string)
string = "".join(c for c in string if counts[c] != 2)
編輯:等等,對不起,我錯過了“連續”。 這將刪除整個字符串中恰好出現兩次的字符(適合您的示例,但不適合一般情況)。
連續過濾器稍微復雜一點,但可行的-只需先找到連續的運行,然后過濾出長度為2的運行。
runs = [[string[0], 0]]
for c in string:
if c == runs[-1][0]:
runs[-1][1] += 1
else:
runs.append([c, 1])
string = "".join(c*length for c,length in runs if length != 2)
Edit2:正如其他答案正確指出的那樣,第一部分由groupby
本地groupby
from itertools import groupby
string = "".join(c*length for c,length in groupby(string) if length != 2)
您可以使用itertools.groupby
:
>>> s = "aaabbccddddddddddeeeee"
>>> from itertools import groupby
>>> n = 3
>>> groups = (list(values) for _, values in groupby(s))
>>> "".join("".join(v) for v in groups if len(v) < n)
'bbcc'
In [15]: some_string = 'aaabbcc'
In [16]: n = 2
In [17]: final_string = ''
In [18]: for k, v in Counter(some_string).items():
...: if v != n:
...: final_string += k * v
...:
In [19]: final_string
Out[19]: 'aaa'
您將需要: from collections import Counter
from collections import defaultdict
def fun(string,n):
dic = defaultdict(int)
for i in string:
dic[i]+=1
check = []
for i in dic:
if dic[i]==n:
check.append(i)
for i in check:
del dic[i]
return dic
string = "aaabbcc"
n = 2
result = fun(string, n)
sol =''
for i in result:
sol+=i*result[i]
print(sol)
輸出
aaa
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.