簡體   English   中英

刪除字符串中N個連續的重復字符

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

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