使用python中的给定列表删除字符串中的特定字符

使用python中的给定列表删除字符串中的特定字符,python,Python,我正在尝试使用上述代码删除字符串中的特定字符。这里有什么问题?字符串是不可变的。因此,您希望将其重新分配。 i是一个变量。通过使用“i”将其视为字符串。 试一试 问题如下: 字符串是不可变的。您需要将字符串设置为替换函数中的字符串 您检查了该字符是否与字符串“i”而不是变量i等效 您缩进了return语句,以便在第一次替换之后调用它。如果未替换,它将返回None 代码如下: punctuation_chars = ["'", '"', ",",

我正在尝试使用上述代码删除字符串中的特定字符。这里有什么问题?

字符串是不可变的。因此,您希望将其重新分配。
i
是一个变量。通过使用
“i”
将其视为字符串。 试一试

问题如下:

  • 字符串是不可变的。您需要将字符串设置为替换函数中的字符串
  • 您检查了该字符是否与字符串
    “i”
    而不是变量
    i
    等效
  • 您缩进了return语句,以便在第一次替换之后调用它。如果未替换,它将返回
    None
  • 代码如下:

    punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@']
    def strip_punctuation(x):
        for i in punctuation_chars:
            if i in x:
               x= x.replace(i,"")
        return x
    
    m= "Twi@sd"
    t=strip_punctuation(m)
    print(t)
    
    输出:
    Twisd

    只要给变量起个更有意义的名字,如果。。。在mystring中,您将看到以下问题:

    punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@']
    
    
    def strip_punctuation(x):
        for i in punctuation_chars:
            for j in x:
                if i == j:
                    # print(i)
                    x = x.replace(i, "")
        return x
    
    
    m = "Twi@sd"
    t = strip_punctuation(m)
    print(t)
    
    这就产生了

    punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@']
    
    
    def strip_punctuation(string):
        for char in punctuation_chars:
            string = string.replace(char, "")
        return string
    
    
    m = "Twi@sd"
    t = strip_punctuation(m)
    print(t)
    

    或者,使用正则表达式,最终它们就是为了:
    Twisd
    

    Replace方法不是就地方法,需要将值存储到变量中才能使用它

    为此,也不需要内部循环

    查看解决方案,如果有任何疑问,请发表评论

    代码:

    输出:

    punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@']
    def strip_punctuation(x):
        for i in punctuation_chars:
            if i in x:
                x=x.replace(i, '')
        return x
    
    m= "Twi@s:d"
    t=strip_punctuation(m)
    print(t)
    

    循环使用
    标点符号\u字符
    并替换每个字符

    Twisd
    

    str.replace()
    返回一个新字符串,因此每次都必须将其分配给一个新变量(python字符串是不可变的)

    replace
    方法不是就地操作,因为字符串在python中是不可变的。您正在屏蔽
    i
    。您预期的输出是什么
    x==“i”
    检查字符串
    “i”
    而不是变量
    i
    。你用下一个循环来掩盖前一个循环的
    i
    变量,对于x中的i是的,我做了。它工作得很好。不知道你为什么拒绝我。为什么不复制并粘贴它,然后自己试着运行它呢?现在它已经修复了。。我要编辑它并添加解释。@Jan你什么时候运行的?在我7分钟前编辑它之前?它为我返回Twisd。@Jan关于缩进错误,你是对的。当我编辑并试图将其粘贴回时,它不会格式化,所以我必须手动将其隔开以格式化。我知道。无论哪种方式,逻辑都是有效的,我只是修复了缩进。您可以避免
    if char in string:
    ,因为它只有在可用时才会替换。
    punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@']
    def strip_punctuation(x):
        for i in punctuation_chars:
            if i in x:
                x=x.replace(i, '')
        return x
    
    m= "Twi@s:d"
    t=strip_punctuation(m)
    print(t)
    
    Twisd
    
    def strip_punctuation(x):
        for c in punctuation_chars:      
            x = x.replace(c, "")
        return x