数组数据结构转换:循环中生成新ID并替换重复值
解决Python数组元素的连续唯一值映射问题
你的需求是将原数组中的每个元素替换为从0开始递增的唯一值,重复元素复用之前的映射值——比如原数组里的9对应0,后续所有9都沿用0,新元素则按顺序分配1、2、3……
可以用一个字典来记录旧值到新值的映射关系,配合遍历就能轻松实现:
代码实现
store = ([9,4,5],[9,4,1],[1,2,3],[9,4,1],[3,7,5],[2,4,1]) value_map = {} current_id = 0 store_new = [] for sub_list in store: new_sub = [] for num in sub_list: if num not in value_map: value_map[num] = current_id current_id += 1 new_sub.append(value_map[num]) store_new.append(tuple(new_sub)) # 要保持元组格式用tuple,要列表就用list # 输出结果 print(store_new) # 结果:([0, 1, 2], [0, 1, 3], [3, 4, 5], [0, 1, 3], [5, 6, 2], [4, 1, 3])
逻辑说明
value_map字典专门存储旧值:新值的映射关系,比如{9:0, 4:1, 5:2...}current_id记录下一个待分配的新值,初始为0- 逐层遍历原数组:
- 遇到未出现过的数字时,将其与当前
current_id绑定,随后current_id自增1 - 遇到已存在的数字时,直接从字典中取出对应的新值
- 遇到未出现过的数字时,将其与当前
- 把处理后的子列表依次加入
store_new,最终得到目标结构
你之前用enumerate没效果很正常——enumerate是用来获取元素的索引位置,无法追踪元素的重复情况和分配映射值,这个场景下字典才是合适的工具。
内容的提问来源于stack exchange,提问作者peter
相关产品推荐
相关产品推荐

