Python 如何删除字符串中的所有连续字符并打印剩余字符串?

Python 如何删除字符串中的所有连续字符并打印剩余字符串?,python,python-3.x,Python,Python 3.x,对于字符串“Missisipie”,请删除所有连续的重复字符并打印剩余字符。 样本输入: “密西西比河” 样本输出: 'mpie'使用带有while循环的re.sub,我们可以尝试从输入中连续删除两个或多个重复字符的集群。我们将重复这样做,直到没有更多的替代品。这就是我们知道何时停止更换的方式 inp = "mississipie" length = len(inp) while True: inp = re.sub(r'(.)\1+', '', inp) i

对于字符串“Missisipie”,请删除所有连续的重复字符并打印剩余字符。 样本输入:
“密西西比河”
样本输出:
'mpie'
使用带有while循环的
re.sub
,我们可以尝试从输入中连续删除两个或多个重复字符的集群。我们将重复这样做,直到没有更多的替代品。这就是我们知道何时停止更换的方式

inp = "mississipie"
length = len(inp)
while True:
    inp = re.sub(r'(.)\1+', '', inp)
    if len(inp) == length:
        break
    length = len(inp)

print("final output: " + inp)
这张照片是:

final output: mpie
以下是更换的步骤:

mississipie
miiipie      (remove 'ss', twice)
mpie         (remove 'iii' cluster, once)

带有
itertools.groupby
的递归版本:

from itertools import groupby

s = 'mississipie'

def remove(s):
    out = ''
    for _, g in groupby(s):
        tmp = ''.join(g)
        if len(tmp) == 1:
            out += tmp
    if out == s:
        return out
    return remove(out)

print(remove(s))
印刷品:

mpie

这听起来像是一个家庭作业问题。您需要创建一个删除重复字符('ss')的函数,然后递归调用自身以删除结果('iii')。如果其他输入可能有更多的重复字符,您还需要添加和if条件,以在字符串长度=1时停止递归,并返回最终字符串。这实际上来自评估。您自己尝试过吗。我们很乐意为您提供任何代码。这是否回答了您的问题?我尝试计算所有元素并删除它们,但没有得到输出,所以我一直在修改它,它完全搞砸了。你能解释一下for循环中的“u”吗?如果你对循环中的迭代器一点也不感兴趣,你可以给它起个名字
\uu
。这是一件像蟒蛇一样的事。在本例中,您对groupby元组的第一个元素(已分组的元素)不感兴趣,而只对第二个元素感兴趣,即元素组本身。因为第一个元素是不相关的,所以它被命名为
。你能解释一下“inp=re.sub(r'()\1+,'',inp)”这一行吗?正则表达式模式
()\1+
匹配任何一个字符,而该字符后面紧跟着同一个字符一次或多次。然后,将整个文本替换为空字符串,以有效地将其从输入中删除。