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

如何为存在重复元素的列表赋值新序号,相同旧值对应同一个连续新值

实现相同旧值映射唯一递增新序号的方法

核心逻辑是用字典存储已经处理过的旧值对应的新序号,避免重复分配序号,仅在首次遇到新的旧值时自增起始序号:

  • 初始化空字典存储旧值到新序号的映射关系
  • 遍历旧列表的每一个元素:
    • 若元素已存在于字典中,直接取出对应新序号加入结果列表
    • 若元素不存在于字典中,将当前起始值作为它的新序号存入字典,加入结果列表后将起始值自增1

可直接运行的实现代码

startval = 901
old_index = [100, 145, 145, 740, 740, 740, 276, 277, 278]
new_index = []
old_to_new = {}

for val in old_index:
    if val not in old_to_new:
        old_to_new[val] = startval
        startval += 1
    new_index.append(old_to_new[val])

print(new_index)
# 输出:[901, 902, 902, 903, 903, 903, 904, 905, 906]

原代码的问题说明

原有实现的核心问题是没有记录已经处理过的重复旧值,同时频繁调用list.count()方法会导致时间复杂度升至O(n²),列表长度较大时运行效率极低。上面的字典映射方案时间复杂度为O(n),适合任意长度的列表处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:18:05