【问题标题】:rename duplicates in python list [duplicate]重命名python列表中的重复项[重复]
【发布时间】:2021-04-17 03:15:53
【问题描述】:

我有一个名字列表,像这样

names =['Jack','Jerry',Jerry','Jerry','Jerry','Jerry','Phillips','Phillips','Phillips','Phillips','Harry','Harry','Harry','Harry','Harry'.....]

我想重命名重复项,因为结果列表应该是这样的

names = ['Jack','Jerry',Jerry_2','Jerry_3','Jerry_4','Jerry_5','Phillips','Phillips_2','Phillips_3','Phillips_4','Harry','Harry_2','Harry_3','Harry_4','Harry_5'.....]

我尝试了代码,但我的逻辑不太好,有没有人可以帮助我?

【问题讨论】:

  • 将它们重命名为什么?

标签: python python-3.x list


【解决方案1】:

保留您遇到的所有不同名称的字典,并记录您遇到它们的次数:

def rename_duplicates(names):
  seen = dict()
  
  for i, name in enumerate(names):
    if name not in seen:
      seencount[name] = 1
    else:
      seen[name] += 1
      names[i] += f'_{seen[name]}'
  
  return names

【讨论】:

    【解决方案2】:

    只需保留一个计数字典:

    In [12]: names = ['Jack','Jerry', 'Jerry','Jerry','Jerry','Jerry','Phillips','Phillips','Phillips','Phillips','Harry','Harry','Harry','Harry','Harry']
        ...:
        ...:
    
    In [13]: counts = {}
    
    In [14]: for i, name in enumerate(names):
        ...:     if name in counts:
        ...:         counts[name] += 1
        ...:         names[i] = f"{name}_{counts[name]}"
        ...:     else:
        ...:         counts[name] = 1
        ...:
    
    In [15]: names
    Out[15]:
    ['Jack',
     'Jerry',
     'Jerry_2',
     'Jerry_3',
     'Jerry_4',
     'Jerry_5',
     'Phillips',
     'Phillips_2',
     'Phillips_3',
     'Phillips_4',
     'Harry',
     'Harry_2',
     'Harry_3',
     'Harry_4',
     'Harry_5']
    

    【讨论】:

      【解决方案3】:

      让我们保留一个 Counter 对象来帮助我们:

      from collections import Counter
      
      def update_repeats(lst) -> list:
          name_counter = Counter()
          for i in range(len(lst)):
              name_counter.update([lst[i]]) # update our counter
              if name_counter[lst[i]] > 1: # repeat, lets update our list value
                  lst[i] = lst[i] + f'_{name_counter[lst[i]]}'
          return lst
      

      【讨论】:

        猜你喜欢
        • 2019-04-27
        • 2018-03-04
        • 2021-06-09
        • 2011-10-04
        • 1970-01-01
        • 2012-12-12
        • 2022-01-18
        • 2013-06-11
        • 2019-02-26
        相关资源
        最近更新 更多