【问题标题】:Python replace multiple string elements in a list with one elementPython用一个元素替换列表中的多个字符串元素
【发布时间】:2021-09-26 04:58:00
【问题描述】:

我有一个这样的列表:

list1 = ['hello', 'halo', 'goodbye', 'bye bye', 'how are you?']

例如,我想将“hello”和“halo”替换为“welcome”,将“goodbye”和“bye bye”替换为“greetings”,因此列表将如下所示:

list1 or newlist = ['welcome', 'welcome', 'greetings', 'greetings', 'how are you?']

我怎样才能以最短的方式做到这一点?

我尝试了this,但它不起作用,除非我先将列表转换为字符串,但我希望它是列表,无论如何我转换为字符串并更改了单词,然后我尝试将其转换回列表,但未正确转换回来。

【问题讨论】:

    标签: python list re


    【解决方案1】:

    如果可以轻松地对替换进行分组,那么这是可行的:

    list1 = ['hello', 'halo', 'goodbye', 'bye bye', 'how are you?']
    new_list = []
    group1 = ('hello', 'halo')
    group2 = ('goodbye', 'bye bye')
    
    for word in list1:
        if word in group1:
            new_list.append('welcome')
        elif word in group2:
            new_list.append('greetings')
        else:
            new_list.append(word)
    
    print(new_list)
    # ['welcome', 'welcome', 'greetings', 'greetings', 'how are you?']
    

    【讨论】:

      【解决方案2】:

      列表理解将是最短的方法......

      list1 = ['hello', 'halo', 'goodbye', 'bye bye', 'how are you?']
      newlist = ['welcome' if i == 'hello' or i == 'halo' else 'greetings' if i == 'goodbye' or i == 'bye bye' else i for i in list1 ]
      print(newlist)
      

      【讨论】:

        【解决方案3】:

        我看到这个问题标有re标签,所以我将使用正则表达式来回答。您可以使用 re.sub 替换文本。

        >>> import re
        >>> list1 = ",".join(['hello', 'halo', 'goodbye', 'bye bye', 'how are you?'])
        >>> list1 = re.sub(r"hello|halo", r"welcome", list1)
        >>> list1 = re.sub(r"goodbye|bye bye", r"greetings", list1)
        >>> print(list1.split(","))
        ['welcome', 'welcome', 'greetings', 'greetings', 'how are you?']
        >>> 
        

        或者,您可以使用列表推导

        ["welcome" if i in ["hello","halo"] else "greetings" if i in ["goodbye","bye bye"] else i for i in list1]
        

        【讨论】:

          猜你喜欢
          • 2017-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-22
          • 1970-01-01
          相关资源
          最近更新 更多