【问题标题】:Python replace() - how to avoid repeating replace()?Python replace() - 如何避免重复replace()?
【发布时间】:2021-06-07 11:56:10
【问题描述】:

sorted_elems 列表中有一些元素将更改为str 例如:

sorted_elems = ['[abc]', '[xyz]', ['qwe']]

我想删除定义的字符 - []' 并在下面打印输出:

所以输出应该是这样的: abc, xyz, qwe.

我的解决方案是:

print(str(sorted_elems).replace('[', '').replace(']', '').replace("'", "")) 

而且效果很好,但问题是如何避免重复这些replace()

【问题讨论】:

  • 使用简单的for loop 怎么样?或者,您可以定义自己的函数,多次调用replace(),然后在代码中使用该函数。
  • 尝试使用正则表达式来grep大括号内的值
  • 你的意思是像for i in sorted_elems: sorted_elems.replace(...)这样的东西吗?如果是,那不是我的意思。我不想重复定义的字符来替换。

标签: python list replace


【解决方案1】:

您可以改用.strip() -

sorted_elems = ['[abc]', '[xyz]', '[qwe]']

for i in sorted_elems: 
    print (i.strip("[]"), end=' ')

输出:

abc xyz qwe

【讨论】:

  • 可能是一个错字,但最后一个测试用例是['qwe'],这并没有解决。
  • @blueteeth 问题有误。
【解决方案2】:

您可以使用正则表达式子函数代替替换函数。

re.sub(r"(\[|\]|')",'',str(sorted_elems))

>>'abc, xyz, qwe'

如果你想要每个分开:

re.sub(r"(\[|\]|')",'',str(sorted_elems)).split(', ')

>> ['abc', 'xyz', 'qwe']

【讨论】:

  • 如何为这些字符制作正则表达式,您能否根据我发布的代码提供一个示例?
【解决方案3】:

定义一个新函数,该函数将从列表中清除已定义的字符。

【讨论】:

    【解决方案4】:

    您的解决方案解决方案相当大,而且可扩展性不强。您忽略了 sorted_elems 是一个列表,并且其中的最后一个值也是一个列表这一事实。

    我认为正确的做法是清理每个元素,然后返回列表,但这是必需的。

    clean_element 函数需要在sorted_elems 的每个元素上运行。

    def clean_element(elem):
        if not elem:
            return ''  # empty list or None or empty string
        elif isinstance(elem, list):
            elem = elem[0]  # get the first element of the list out
        
        return elem.replace('[', '').replace(']', '')
    

    现在我们可以将它应用于每个元素,并根据需要返回列表。

    cleaned_elems = [clean_element(e) for e in sorted_elems]
    print(', '.join(cleaned_elems)
    

    我认为问题的一部分是关于比replace() 更好的方法来摆脱东西。有两种方法,strip()re.sub()strip() 是我的首选,因为不需要导入任何内容。

    清理输入的结构后,每个元素要么被完全清理,要么被[]包围,可以剥离。

        return elem.replace('[', '').replace(']', '')
    

    可能变成

        return elem.strip('[]')
    

    【讨论】:

      【解决方案5】:

      for循环就好了

      for i in sorted_elems:
           print(str(i).replace('[', '').replace(']', '').replace("'", "")) 
      
      

      【讨论】:

      • 这不是我所问问题的答案。
      【解决方案6】:

      您可以将 translate() 与删除不需要的字符的翻译表一起使用:

      removeChars = str.maketrans("","","[']") # 3rd parameter is characters to remove
          
      sorted_elems = ['[abc]', '[xyz]', ['qwe']]
      
      print(str(sorted_elems).translate(removeChars))
      
      abc, xyz, qwe
      

      【讨论】:

        猜你喜欢
        • 2015-04-29
        • 1970-01-01
        • 2012-07-13
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 2013-09-17
        • 1970-01-01
        相关资源
        最近更新 更多