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

如何用特定序列替换二级列表中的重复值?(Python)

问题描述

现有二维列表:

elements = 
[
[7, 3, 9, 6], 
[5, 7, 9, 6], 
[9, 8, 1, 4], 
[3, 9, 4, 7], 
]

需要按以下规则修改列表:

  • 找出整个列表的最大值,从这个值的下一个数开始生成递增序列
  • 对每个子列表中在全局范围内重复出现的数值,保留第一次出现的实例,后续出现的按元素从小到大的顺序,替换为上述递增序列中的值
    最终修改后的列表要求如下:
[
[7, 3, 9, 6], 
[5, 12, 14, 11], 
[15, 8, 1, 4], 
[10, 16, 4, 13], 
]

我尝试过遍历列表,但没能完成这个任务。

解决方案

直接上可运行的Python代码,逻辑注释已嵌入代码:

elements = [
    [7, 3, 9, 6],
    [5, 7, 9, 6],
    [9, 8, 1, 4],
    [3, 9, 4, 7],
]

# 统计每个元素的出现次数、首次出现位置及需替换的后续位置
from collections import defaultdict

element_stats = defaultdict(lambda: {"count": 0, "first_pos": None, "replace_pos": []})

for row_idx, row in enumerate(elements):
    for col_idx, num in enumerate(row):
        element_stats[num]["count"] += 1
        # 记录首次出现的位置
        if element_stats[num]["first_pos"] is None:
            element_stats[num]["first_pos"] = (row_idx, col_idx)
        else:
            # 后续出现的位置标记为需要替换
            element_stats[num]["replace_pos"].append((row_idx, col_idx))

# 获取全局最大值,确定替换序列的起始值
global_max = max(num for row in elements for num in row)
current_val = global_max + 1

# 按元素从小到大排序,依次替换后续出现的重复值
for num in sorted(element_stats.keys()):
    stats = element_stats[num]
    # 仅处理出现次数大于1的元素
    if stats["count"] > 1:
        for pos in stats["replace_pos"]:
            elements[pos[0]][pos[1]] = current_val
            current_val += 1

# 打印结果
print("[")
for row in elements:
    print(f"    {row},")
print("]")

逻辑说明

  1. 遍历整个列表,统计每个元素的出现情况:第一次出现的位置保留,之后出现的位置记录下来等待替换
  2. 找到列表全局最大值,从最大值+1开始生成递增的替换序列
  3. 把所有元素按从小到大排序,给每个重复元素的后续出现位置依次分配递增的替换值,确保替换顺序符合要求

内容的提问来源于stack exchange,提问作者Владислав Петрушин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:35:16