【问题标题】:remove numbers string python [duplicate]删除数字字符串python [重复]
【发布时间】:2017-02-15 19:40:55
【问题描述】:

对于我的作业,我必须创建一个函数,该函数返回一个与给定字符串相同但删除了数字的新字符串。

示例:remove digits('abc123') 将返回字符串 'abc'。

我已经尝试了几乎所有我能想到的方法,但它不能正常工作:(

def test(str):
    for ch in str:
        num = ['0', '1', '2', '3', '4', '6', '7', '8', '9']
        if ch == num[0]:
            return str.replace(ch, '')
        elif ch == num[1]:
            return str.replace(ch, '')
        elif ch == num[2]:
            return str.replace(ch, '')
        elif ch == num[3]:
            return str.replace(ch, '')
        elif ch == num[4]:
            return str.replace(ch, '')
        elif ch == num[5]:
            return str.replace(ch, '')
        elif ch == num[6]:
            return str.replace(ch, '')
        elif ch == num[7]:
            return str.replace(ch, '')
        elif ch == num[8]:
            return str.replace(ch, '')

我输入 test('abc123'),期望输出是 'abc'。但相反,我得到 'abc23' 作为我的输出。

在其他尝试中,同样的问题:

def test(str):
    for char in str:
        num = ['0', '1', '2', '3', '4', '6', '7', '8', '9']
        if char in list(num):
            return str.replace(char, '', len(str))

我得到相同的结果。

谁能帮帮我?这将不胜感激。

【问题讨论】:

  • 这是因为当您第一次遇到数字时,您正在从功能中返回。 return 停止执行并退出函数!
  • 另外,您可以检查char in "0123456789" 是否会简化您的代码。

标签: python string


【解决方案1】:

使用正则表达式

import re
def test(str):
    string_no_numbers = re.sub("\d+", " ", str)
    print(string_no_numbers)
test('abc123') #prints abc

【讨论】:

    【解决方案2】:

    使用这个

    string = ''.join([c for c in string if c not in "1234567890"])
    

    【讨论】:

      【解决方案3】:

      您的第二个解决方案很接近:

      def drop_digits(in_str):
          digit_list = "1234567890"
          for char in digit_list:
              in_str = in_str.replace(char, "")
      
          return in_str
      

      原来的问题是你只替换了 '1' 字符后返回。

      您也可以通过列表推导来做到这一点:

      return ''.join([char for char in in_str if not char.isdigit()])
      

      【讨论】:

      • 可能想要使用比 OP 更好的变量名 ;)
      • 好点。改变...
      • 谢谢老兄,真的很感激
      【解决方案4】:

      您需要阅读一些 Python 基础知识。 “return”退出你的函数,所以它只会修改一个条目。

      这里有一个提示:用更新的副本替换 str 而不是返回它。

      str = str.replace(ch, '')
      

      【讨论】:

      • 至于 python 基础......我们在这里处理的是一个函数而不是一个方法。这不是 Java ;)
      • 嗯,如果我们要迂腐的话,测试可以在一个没有“self”参数的类中;)
      • 如果我们想成为 super 迂腐,test 也不是因为它有缩进错误。
      • ^ 绝对同意
      【解决方案5】:
      def test(string):
          return ''.join((letter for letter in string if not letter.isdigit()))
      

      【讨论】:

      • 这不仅会删除数字。
      • 可能想查if not letter.isdigit()
      • 我用过not letter.isdigit(),但觉得有点矫枉过正,把它改成了.isalpha,但现在又改了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多