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

Python列表重构:将非重复元素按递增1规则调整

问题修正:Python列表元素重映射需求

需求说明

输入列表:

values = [1827, 1827, 1829, 1829, 1827, 1827, 1833]

规则要求:

  • 重复出现的元素保持映射后的值不变
  • 首次出现的新元素,映射值设为当前列表已出现的最大值加1
  • 后续再次出现该新元素,沿用之前的映射值

示例:1829首次出现时,当前已出现的最大值是1827,所以映射为1828;1833首次出现时,当前已出现的最大值是1828,所以映射为1829。预期输出:

[1827,1827,1828,1828,1827,1827,1829]

原代码及问题

原代码仅将元素直接映射为自身,未处理新元素的重映射规则,导致输出不符合预期:

contact_ids = [1827, 1827, 1829, 1829, 1827, 1827, 1833]
output = []
seen_ids = {}

for id in contact_ids:
    if id not in seen_ids:
        seen_ids[id] = id
        output.append(id)
    else:
        output.append(seen_ids[id])

print("CONTACT_ID")
for id in output:
    print(id)

当前输出:

CONTACT_ID
1827
1827
1829
1829
1827
1827
1833

修正方案

需要维护两个核心变量:原ID到新ID的映射字典,以及当前已使用的最大值。遍历元素时按规则更新映射和最大值,代码如下:

contact_ids = [1827, 1827, 1829, 1829, 1827, 1827, 1833]
output = []
id_mapping = {}
current_max = None

for id in contact_ids:
    if id not in id_mapping:
        # 处理首次出现的元素
        if current_max is None:
            # 第一个元素直接作为初始最大值
            new_id = id
            current_max = id
        else:
            # 新元素映射为当前最大值+1,并更新最大值
            new_id = current_max + 1
            current_max = new_id
        id_mapping[id] = new_id
    # 不管是否首次出现,都添加映射后的值到输出
    output.append(id_mapping[id])

print("CONTACT_ID")
for id in output:
    print(id)

逻辑说明

  1. 初始化id_mapping存储原ID到新ID的对应关系,current_max记录当前已使用的最大值
  2. 遍历每个元素:
    • 若元素未在映射中,根据current_max计算新ID:第一个元素直接用自身,后续新元素用current_max+1,同时更新current_max和映射字典
    • 若元素已在映射中,直接取映射值加入输出
  3. 最终输出符合需求的结果

运行后输出:

CONTACT_ID
1827
1827
1828
1828
1827
1827
1829

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:18:33