Python根据x列表与y子列表长度生成嵌套递增列表的问题求助
错误原因
代码存在两个核心问题:
- 临时列表
l仅在循环外初始化一次:Python中列表为可变对象,每次z.append(l)存入的都是同一个列表的引用,后续对l的修改会同步影响z中已存入的所有元素 z.append(l)执行时机错误:先存入空列表再填充l,最终z中两个元素都会指向同一个存储了所有计算结果的列表
修正方案
写法1:调整原有循环逻辑
x = [0,2] y = [['1','2','1'],['5','5','5','2','1']] z = [] for i in range(len(y)): # 每次循环新建独立的临时列表 l = [] for j in range(len(y[i])): l.append(x[i]+j) # 列表填充完成后再存入z z.append(l) print(z)
运行输出:[[0, 1, 2], [2, 3, 4, 5, 6]],完全符合预期。
写法2:更简洁的列表推导式实现
x = [0,2] y = [['1','2','1'],['5','5','5','2','1']] z = [ [start + step for step in range(len(sub_y))] for start, sub_y in zip(x,y) ] print(z)
运行效果和上述代码完全一致。
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

