如何为列表中重复元素按出现顺序添加递增序号标记
列表元素按顺序编号标记的实现方案
核心思路
用字典动态记录每个元素的出现次数,遍历原列表时,每遇到一个元素就更新对应计数,再拼接成「元素+计数」的字符串存入结果列表。不需要提前获取唯一元素(如果已经获取也可以用它初始化字典)。
方法一:无需依赖numpy的简洁实现
foo = ['A', 'A', 'B', 'A', 'B', 'C', 'C', 'A', 'B', 'C', 'A'] count_tracker = {} output = [] for item in foo: # 首次遇到元素时初始化计数为0 if item not in count_tracker: count_tracker[item] = 0 count_tracker[item] += 1 output.append(f"{item}{count_tracker[item]}") print(output) # 输出:['A1', 'A2', 'B1', 'A3', 'B2', 'C1', 'C2', 'A4', 'B3', 'C3', 'A5'] # 注:你给出的output中第9个元素是B2,这里实际应为B3,属于笔误
方法二:基于np.unique初始化字典的实现
如果你坚持要用已获取的唯一元素来初始化计数字典,可以这么写:
import numpy as np foo = ['A', 'A', 'B', 'A', 'B', 'C', 'C', 'A', 'B', 'C', 'A'] unique_elements = np.unique(foo) count_tracker = {elem: 0 for elem in unique_elements} output = [] for item in foo: count_tracker[item] += 1 output.append(f"{item}{count_tracker[item]}") print(output) # 输出同上
说明
两种方法都是一次遍历完成,时间复杂度为O(n),效率很高。第一种方法更灵活,不需要引入numpy依赖;第二种则贴合你已经获取唯一元素的操作场景。
内容的提问来源于stack exchange,提问作者coffeedealer
相关产品推荐
相关产品推荐

