Python双层列表推导式为Object实例添加连续索引参数的实现方法
方案1:通过坐标直接计算索引(最简洁,不需要额外函数)
因为你的网格是固定3*3的结构,每行有3个元素,索引按行优先顺序递增,可直接通过x*3 + y计算得到对应值,代码如下:
self.Item = [[Object(x, y, x*3 + y) for y in range(3)] for x in range(3)]
生成的索引会从0到8连续递增,符合需求。
方案2:使用enumerate实现(适配网格大小可变的场景)
如果你后续可能调整网格的行列数,可以用enumerate分别获取行、列索引再计算总索引,不需要硬编码数值:
# 可按需修改行列数 ROW_COUNT = 3 COL_COUNT = 3 self.Item = [ [Object(x, y, x * COL_COUNT + y) for y, _ in enumerate(range(COL_COUNT))] for x, _ in enumerate(range(ROW_COUNT)) ]
方案3:使用计数器自动递增(无需计算索引关系)
如果不想手动处理行列索引的计算逻辑,可以用itertools.count生成连续的计数器,遍历的时候自动取值即可:
from itertools import count index_counter = count(0) self.Item = [[Object(x, y, next(index_counter)) for y in range(3)] for x in range(3)]
这种方式不管嵌套层数、行列数怎么调整,都能保证生成连续的整数索引,通用性更强。
内容的提问来源于stack exchange,提问作者Sylvan Franklin
相关产品推荐
相关产品推荐

