如何在python中删除字符串中的中间字符

如何在python中删除字符串中的中间字符,python,Python,我真的不知道该怎么想 remove_middle_character("apple") 'aple' remove_middle_character("banana") 'bana' remove_middle_character("discount") ‘disunt‘ ”“” 因为这可能是课堂作业,所以我不会给你代码(无论如何,你使用它都是不明智的,因为你的教育机构可能知道堆栈溢出,并且会发现你抄袭)。相反,我将提供您需要了解的指导 如果字符串或的大小为2或更小(我们很早就处理了这个

我真的不知道该怎么想

 remove_middle_character("apple")
'aple'
 remove_middle_character("banana")
'bana'
 remove_middle_character("discount")
‘disunt‘
”“”

因为这可能是课堂作业,所以我不会给你代码(无论如何,你使用它都是不明智的,因为你的教育机构可能知道堆栈溢出,并且会发现你抄袭)。相反,我将提供您需要了解的指导

如果字符串或的大小为2或更小(我们很早就处理了这个问题,以便在下面的步骤中不必担心边缘情况),只需返回一个空字符串

否则,如果字符串的长度为奇数,则获取长度
x
,并返回第一个
x//2
/
运算符为整数除法)字符,该字符与从
x//2+1
开始的字符连接

否则,返回第一个
x//2-1
字符,这些字符与从
x//2+1
开始的字符连接在一起

在将其转化为代码方面:

  • 您可以使用
    len(x)
    获取字符串
    x
    的长度
  • 您可以使用
    x[:n]
    获取第一个
    n
    字符
  • 您可以使用
    x[m://code>获取从
    m
    开始的字符
  • 您可以将字符串与
    +
    连接起来;及
  • 您可以使用
    if(p%2)==0
    (当然,奇数将导致
    (p%2)==1
    )来测试值
    p
    是否为偶数

这应该是您自己编写代码所需的全部内容。

因为这可能是课堂作业,所以我不会给您代码(无论如何,您使用代码都是不明智的,因为您的教育机构可能知道堆栈溢出,并且会发现您抄袭)。相反,我将提供您需要了解的指导

如果字符串或的大小为2或更小(我们很早就处理了这个问题,以便在下面的步骤中不必担心边缘情况),只需返回一个空字符串

否则,如果字符串的长度为奇数,则获取长度
x
,并返回第一个
x//2
/
运算符为整数除法)字符,该字符与从
x//2+1
开始的字符连接

否则,返回第一个
x//2-1
字符,这些字符与从
x//2+1
开始的字符连接在一起

在将其转化为代码方面:

  • 您可以使用
    len(x)
    获取字符串
    x
    的长度
  • 您可以使用
    x[:n]
    获取第一个
    n
    字符
  • 您可以使用
    x[m://code>获取从
    m
    开始的字符
  • 您可以将字符串与
    +
    连接起来;及
  • 您可以使用
    if(p%2)==0
    (当然,奇数将导致
    (p%2)==1
    )来测试值
    p
    是否为偶数

这就是您自己编写代码所需的全部内容。

利用上述所有优秀建议,我建议采用一种重构方法,其中paxdiablo提到的边缘条件和mhawke增强的边缘条件都得到了满足,但无需使用if-else语句

从paxdiablo可以看出,如果字符串长度为奇数(模函数返回1),则字符串的第一部分为: x//2(减去0)。
如果字符串长度为偶数(模函数返回0),则字符串的第一部分为: x//2-1(减去1)

在这两种情况下(奇数和偶数长度),字符串的第二部分是: x//2+1

所以我们需要减去字符串长度的模2的倒数。我们可以将偶数长度设为奇数,将奇数长度设为偶数。一种可能的方法是:mod=(len+1)%2。因此,可能的解决方案可能如下所示:

def remove_middle_character(s):
    h = len(s)//2
    mod = (len(s) + 1) % 2
    return s[:h - mod] + s[h + 1:]

if __name__ == "__main__":
    print(remove_middle_character(""))
    print(remove_middle_character("x"))
    print(remove_middle_character("xy"))
    print(remove_middle_character("apple"))
    print(remove_middle_character("banana"))
    print(remove_middle_character("discount"))

使用上面所有优秀的建议,我建议一种重构方法,其中paxdiablo提到的边缘条件和mhawke增强的边缘条件都得到了满足,但不需要使用if-else语句

从paxdiablo可以看出,如果字符串长度为奇数(模函数返回1),则字符串的第一部分为: x//2(减去0)。
如果字符串长度为偶数(模函数返回0),则字符串的第一部分为: x//2-1(减去1)

在这两种情况下(奇数和偶数长度),字符串的第二部分是: x//2+1

所以我们需要减去字符串长度的模2的倒数。我们可以将偶数长度设为奇数,将奇数长度设为偶数。一种可能的方法是:mod=(len+1)%2。因此,可能的解决方案可能如下所示:

def remove_middle_character(s):
    h = len(s)//2
    mod = (len(s) + 1) % 2
    return s[:h - mod] + s[h + 1:]

if __name__ == "__main__":
    print(remove_middle_character(""))
    print(remove_middle_character("x"))
    print(remove_middle_character("xy"))
    print(remove_middle_character("apple"))
    print(remove_middle_character("banana"))
    print(remove_middle_character("discount"))

嗨,欢迎来到SO!请发布您迄今为止尝试过的内容。我们很乐意帮助您解决问题,但重点不是让其他人为您编写所有代码;)。有关如何提出更好的问题,这将有助于人们给你更好的答案,请参阅帖子。你可能希望函数名称多元化,即
删除\u中间字符()
,因为对于长度相等的字符串,可以删除两个字符,例如
折扣->不连续
您好,欢迎使用SO!请发布您迄今为止尝试过的内容。我们很乐意帮助您解决问题,但重点不是让其他人为您编写所有代码;)。关于如何提出更好的问题,这将有助于人们给你更好的答案,请参阅帖子。你可能希望函数名多元化,即
删除\u中间字符()
,因为对于偶数长度的字符串,可以删除两个字符,例如
折扣->不使用
,尽管函数名建议删除单个字符,示例显示,对于偶数长度的字符串,中间的2个字符将被删除,因此长度为2的字符串也应返回空字符串。否则,这是一个很好的建议,不要把它全部放在盘子里。好的观点,@mhawke,标题(和例子)表明了真正的本质