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

为嵌套列表中每个元素分配唯一递增编号(保留原结构)

为嵌套列表元素分配唯一递增编号的解决方案

问题描述

现有嵌套列表:

data = [
    [0, 1, 2, 1, 1, 2, 3, 1, 2, 0, 2, 1, 4, 3, 2, 4, 4, 4, 0, 0, 2, 2, 2, 2, 5, 5, 3, 4, 0, 0, 4, 2, 5, 2, 3],
    [2, 0, 0, 2, 3, 2, 3, 0, 1, 4, 3, 3, 0, 0, 0, 0, 3, 2, 0, 1, 4, 5, 5, 3, 3, 1, 3, 4, 3, 0, 0, 5, 1, 4, 5],
    [0, 1, 2, 0, 3, 2, 0, 4, 3, 1, 3, 1, 1, 2, 4, 0, 2, 3, 1, 4, 3, 4, 1, 5, 3, 0, 5, 3, 3, 4, 2, 3, 1, 5, 5]
]

需求:为列表中每个元素分配唯一递增且无重复的编号,编号按行优先遍历顺序(先遍历第一个子列表的所有元素,再第二个,以此类推)生成,同时必须保留原嵌套列表的结构,不能扁平化。

用户尝试使用嵌套enumerate循环但未成功,以下是可行的解决方案。

解决方案

方法1:手动维护计数器变量

初始化一个计数器,从指定起始值(默认0)开始,逐层遍历嵌套列表,用计数器值替换每个元素后自增计数器。这种方法逻辑直观,适合理解基础遍历逻辑:

data = [
    [0, 1, 2, 1, 1, 2, 3, 1, 2, 0, 2, 1, 4, 3, 2, 4, 4, 4, 0, 0, 2, 2, 2, 2, 5, 5, 3, 4, 0, 0, 4, 2, 5, 2, 3],
    [2, 0, 0, 2, 3, 2, 3, 0, 1, 4, 3, 3, 0, 0, 0, 0, 3, 2, 0, 1, 4, 5, 5, 3, 3, 1, 3, 4, 3, 0, 0, 5, 1, 4, 5],
    [0, 1, 2, 0, 3, 2, 0, 4, 3, 1, 3, 1, 1, 2, 4, 0, 2, 3, 1, 4, 3, 4, 1, 5, 3, 0, 5, 3, 3, 4, 2, 3, 1, 5, 5]
]

# 初始化计数器,若需从1开始编号改为counter = 1
counter = 0
result = []

for sublist in data:
    new_sublist = []
    for _ in sublist:
        new_sublist.append(counter)
        counter += 1
    result.append(new_sublist)

# 输出结果
print(result)

方法2:使用itertools.count自动生成编号

利用Python标准库itertools.count生成一个无限递增的迭代器,无需手动维护计数器,代码更简洁高效:

import itertools

data = [
    [0, 1, 2, 1, 1, 2, 3, 1, 2, 0, 2, 1, 4, 3, 2, 4, 4, 4, 0, 0, 2, 2, 2, 2, 5, 5, 3, 4, 0, 0, 4, 2, 5, 2, 3],
    [2, 0, 0, 2, 3, 2, 3, 0, 1, 4, 3, 3, 0, 0, 0, 0, 3, 2, 0, 1, 4, 5, 5, 3, 3, 1, 3, 4, 3, 0, 0, 5, 1, 4, 5],
    [0, 1, 2, 0, 3, 2, 0, 4, 3, 1, 3, 1, 1, 2, 4, 0, 2, 3, 1, 4, 3, 4, 1, 5, 3, 0, 5, 3, 3, 4, 2, 3, 1, 5, 5]
]

# 创建从0开始的递增迭代器,start参数可指定起始编号(如start=1)
count_iter = itertools.count(start=0)

# 列表推导式生成结果,保留原嵌套结构
result = [[next(count_iter) for _ in sublist] for sublist in data]

# 输出结果
print(result)

关键说明

  • 两种方法均严格遵循行优先的遍历顺序分配编号,完全保留原嵌套列表的结构。
  • 起始编号可灵活调整:手动计数器直接修改初始值,itertools.count调整start参数即可。
  • 原列表中的元素值不影响编号分配,因为我们仅依据元素的遍历位置生成编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:45:25