删除数字字符串python [重复]

Posted

技术标签:

【中文标题】删除数字字符串python [重复]【英文标题】:remove numbers string python [duplicate] 【发布时间】: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" 是否会简化您的代码。 【参考方案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,但现在又改了。

以上是关于删除数字字符串python [重复]的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题 Python 实现删除重复数字后的最大数字100%通过率2022.11 Q4 新题

Python编程题35--删除字符串中的所有相邻重复项

从Python中的字符串中删除所有非数字字符

华为OD机试真题 JS 实现删除重复数字后的最大数字2023 Q1 | 200分

怎么用JS把特定字符串重复的字符删除留下一个

python中如何处理一个字符串中的每一个字符