【问题标题】:replacing string in list of lists python替换列表python列表中的字符串
【发布时间】:2019-02-26 23:41:44
【问题描述】:

我有一个包含三个单独列表的列表:

James =     ['Alvin Kamara','Alex Collins','Michael Thomas',
          'Adam Thielen','Evan Engram','Lamar Miller']

Ben =   ['Todd Gurley II','Royce Freeman','Larry Fitzgerald',
        'Cooper Kupp','Benjamin Watson','Robby Anderson']

Chris =     ['Dion Lewis','Rex Burkhead','Julio Jones',
          'Keenan Allen','Zach Ertz','Demaryius Thomas']

我想删除文本“II”,如果您查看“Ben”列表,会将“Toddy Gurley II”更改为“Todd Gurley”。我目前的尝试是这样的:

master_list = [James,Ben,Chris]

for owner in master_list:
    owner = [word.replace(' II','') for word in owner]

print(master_list[1])

但我得到的输出是:

['Todd Gurley II', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']

【问题讨论】:

    标签: python list replace


    【解决方案1】:

    你可以使用re:

    import re
    print([re.sub('\sII$', '', i) for i in master_list[1]])
    

    输出:

    ['Todd Gurley', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']
    

    【讨论】:

      【解决方案2】:

      在您的外部 for 循环中,您更新了 owner 变量的副本,但不要在列表中替换它。您可以改为将更新后的 owner 变量添加到新列表中:

      new_list = []
      for owner in master_list:
          owner = [word.replace(' II','') for word in owner]
          new_list.append(owner)
      
      print(new_list[1])
      
      ['Todd Gurley', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']
      

      或者,您可以在所有者列表上使用enumerate(),以便更新原来的master_list

      for i, owner in enumerate(master_list):
          owner = [word.replace(' II','') for word in owner]
          master_list[i] = owner
      
      print(master_list[1])
      
      ['Todd Gurley', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']
      

      【讨论】:

        【解决方案3】:

        当您致电owner = [word.replace(' II','') for word in owner] 时,您并未更新master_list;您正在修改其中一个元素的副本。

        您可以循环并更新master_list,方法是拨打类似

        master_list[1] = [word.replace(' II','') for word in owner]
        

        或者你可以引用一个新数组:

        new_master_list = []
        for owner in master_list:
            new_master_list.append([word.replace(' II', '') for word in owner])
        
        print(new_master_list[1])
        

        【讨论】:

          【解决方案4】:

          我们可以在这里结合 enumeratelist comprehension 并使用我们字符串的[-2:] 位置进行评估

          l = [James, Ben, Chris]
          
          for idx, item in enumerate(l):
              l[idx] = [i[:-3] if 'II' in i[-2:] else i for i in item]
          
          chrx@chrx:~/python/stackoverflow/9.22$ python3.7 uk.py
          [['Alvin Kamara', 'Alex Collins', 'Michael Thomas', 'Adam Thielen', 'Evan 
          Engram', 'Lamar Miller'], ['Todd Gurley', 'Royce
          Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby
          Anderson'], ['Dion Lewis', 'Rex Burkhead', 'Julio Jones', 'Keenan
          Allen', 'Zach Ertz', 'Demaryius Thomas']]
          

          【讨论】:

            猜你喜欢
            • 2010-10-20
            • 2019-01-30
            • 2012-11-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-01
            • 2013-06-20
            • 2021-06-17
            相关资源
            最近更新 更多