You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组数据结构转换:循环中生成新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])

逻辑说明

  1. value_map 字典专门存储旧值:新值的映射关系,比如{9:0, 4:1, 5:2...}
  2. current_id 记录下一个待分配的新值,初始为0
  3. 逐层遍历原数组:
    • 遇到未出现过的数字时,将其与当前current_id绑定,随后current_id自增1
    • 遇到已存在的数字时,直接从字典中取出对应的新值
  4. 把处理后的子列表依次加入store_new,最终得到目标结构

你之前用enumerate没效果很正常——enumerate是用来获取元素的索引位置,无法追踪元素的重复情况和分配映射值,这个场景下字典才是合适的工具。

内容的提问来源于stack exchange,提问作者peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:10:23