【问题标题】:Perform a string operation for every element in a Python list对 Python 列表中的每个元素执行字符串操作
【发布时间】:2011-10-30 21:54:39
【问题描述】:

我有一个 Python 字符串列表 - elements。我想编辑elements 中的每个element。请参阅下面的代码(它不起作用,但您会明白的):

for element in elements:
    element = "%" + element + "%"

有没有办法做到这一点?

【问题讨论】:

    标签: python string list string-operations


    【解决方案1】:

    您可以使用列表推导:

    elements = ["%" + e + "%" for e in elements]
    

    【讨论】:

      【解决方案2】:

      您可以使用列表推导:

      elements = ["%{}%".format(element) for element in elements]
      

      【讨论】:

        【解决方案3】:
        elements = ['%{0}%'.format(element) for element in elements]
        

        【讨论】:

        • @cfarm54 是的,docs 很不错
        • 抱歉不是 .format 部分,将代码放在括号中的语法。
        • @cfarm54 哦,他们叫list comprehensions
        • 这不会将整个数组复制到新位置吗?有办法就地修改吗?
        【解决方案4】:
        elements = map(lambda e : "%" + e + "%", elements)
        

        【讨论】:

          【解决方案5】:

          基本上有两种方法可以做您想做的事:编辑您拥有的列表,或者创建一个包含您想要的更改的新列表。目前上面的所有答案都显示了如何使用列表理解(或map())来构建新列表,我同意这可能是要走的路。

          另一种可能的方法是遍历列表并就地编辑它。如果列表很大并且您只需要更改一些,您可能会这样做。

          for i, e in enumerate(elements):
              if want_to_change_this_element(e):
                  elements[i] = "%{}%".format(e)
          

          但正如我所说,我建议您使用列表理解答案之一。

          【讨论】:

            【解决方案6】:

            这里还有一些例子

            char = ['g:', 'l:', 'q:']

            使用替换

            for i in range(len(char)):
                char[i] = char[i].replace(':', '')
            

            使用条带

            for i in range(len(char)):
                char[i] = char[i].strip(':')
            

            使用函数

            def list_cleaner(list_):
                return [char_.strip(':') for char_ in list_]
            
            
            new_char = list_cleaner(char)
            print(new_char)
            

            使用生成器功能(如果您有大量数据,建议使用)

            def generator_cleaner(list_):
                yield from (char_.strip(':') for char_ in list_)
            
            # Prints all results in once
            gen_char = list(generator_cleaner(char))
            
            # Prints as much as you need, in this case only 8 chars
            # I increase a bit the list so it makes more sense
            char = ['g:', 'l:', 'q:', 'g:', 'l:', 'q:', 'g:', 'l:', 'q:']
            
            # let's call our Generator Function
            gen_char_ = generator_cleaner(char)
            
            # We call only 8 chars
            gen_char_ = [next(gen_char_) for _ in range(8)]
            print(gen_char_)
            

            【讨论】:

              【解决方案7】:

              Python 3.6+ 版本(f 字符串):

              elements = [f'%{e}%' for e in elements]
              

              【讨论】:

                猜你喜欢
                • 2021-08-05
                • 2016-08-03
                • 2014-01-24
                • 2023-03-09
                • 1970-01-01
                • 1970-01-01
                • 2016-06-30
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多