【问题标题】:How to delete all the consecutive characters in a string and print the remaining string?如何删除字符串中的所有连续字符并打印剩余的字符串?
【发布时间】:2020-07-23 17:05:56
【问题描述】:

对于字符串“mississipie”,删除所有连续的重复字符并打印剩余的字符。 示例输入: 'mississipie' 样本输出: 'mpie'

【问题讨论】:

  • 这听起来像是一道作业题。您需要创建一个删除重复字符('ss')的函数,然后递归调用自身以删除结果('iii')。如果某些其他输入可能有更多重复字符,您还需要添加 if 条件以在字符串长度 = 1 时停止递归并返回最终字符串。
  • 实际上来自评估。
  • 你自己试过了吗? How do I ask and answer homework questions?。我们很乐意为您提供任何代码。
  • 我尝试计算所有元素并删除它们但没有得到输出,所以我一直在修改它,它完全搞砸了

标签: python python-3.x


【解决方案1】:

带有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

【讨论】:

  • 你能解释一下 for 循环中的 '_,' 吗?它是做什么用的
  • 如果您对循环中的迭代器不感兴趣,您可以将其命名为_。这是一个pythonic的事情。在这种情况下,您对 groupby-tuple 的第一个元素(被分组的元素)不感兴趣,而只对第二个元素感兴趣,即元素组本身。由于第一个元素无关紧要,因此将其命名为_
【解决方案2】:

使用re.sub 和while 循环,我们可以尝试从输入中连续删除两个或多个重复字符的簇。我们将重复这样做,直到不再进行替换。这就是我们知道何时停止更换的方式。

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)

【讨论】:

  • 你能解释一下“inp = re.sub(r'(.)\1+', '', inp)”这行吗?
  • 正则表达式模式(.)\1+ 匹配任何单个字符,然后该字符后面跟着相同的字符一次或多次。然后,将整个文本替换为空字符串,以有效地将其从输入中删除。
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2017-03-30
  • 2022-01-05
  • 2013-10-02
  • 1970-01-01
相关资源
最近更新 更多