Python中基于其他列表生成新列表的代码问题排查
问题解决:列表元素添加逻辑错误修正
我有两个列表A2和J,需要实现:当J[0][i] == 0时,向列表A3中添加[0];否则添加A2[J[0][i]]。以下是我的代码、当前输出和期望输出:
当前代码
A2 = [[2, 3, 5], [3, 4, 6], [0, 3, 5], [0, 1, 2, 4, 5, 6], [1, 3, 6], [0, 2, 3, 7, 8, 10], [1, 3, 4, 8, 9, 11], [5, 8, 10], [5, 6, 7, 9, 10, 11], [6, 8, 11], [5, 7, 8], [6, 8, 9]] J=[[0, 2, 0, 6, 7, 9, 10]] A3=[] for i in range(0,len(J[0])): if (J[0][i]==0): A3==[0] else: A33=A2[J[0][i]] A3.append(A33) print("A3 =",A3)
当前输出
A3 = [[0, 3, 5], [1, 3, 4, 8, 9, 11], [5, 8, 10], [6, 8, 11], [5, 7, 8]]
期望输出
A3 = [[0], [0, 3, 5], [0], [1, 3, 4, 8, 9, 11], [5, 8, 10], [6, 8, 11], [5, 7, 8]]
错误原因
核心问题在if分支的A3==[0]:这是相等比较操作,不是向列表添加元素的操作,所以当J[0][i]为0时,没有往A3中添加任何内容,导致最终结果缺失了两个[0]元素。
修正后的代码
A2 = [[2, 3, 5], [3, 4, 6], [0, 3, 5], [0, 1, 2, 4, 5, 6], [1, 3, 6], [0, 2, 3, 7, 8, 10], [1, 3, 4, 8, 9, 11], [5, 8, 10], [5, 6, 7, 9, 10, 11], [6, 8, 11], [5, 7, 8], [6, 8, 9]] J=[[0, 2, 0, 6, 7, 9, 10]] A3=[] for i in range(len(J[0])): if J[0][i] == 0: A3.append([0]) # 改为append操作添加目标元素 else: A3.append(A2[J[0][i]]) # 直接添加,移除多余中间变量 print("A3 =", A3)
改动说明
- 将
if分支的A3==[0]替换为A3.append([0]),这是向列表末尾添加元素的正确方法; - 移除多余的中间变量
A33,直接将A2[J[0][i]]传入append,简化代码; - 去掉
range(0, len(...))中的0,range默认从0开始,不影响结果且更简洁。
运行修正后的代码即可得到期望输出。
内容的提问来源于stack exchange,提问作者isaacmodi123
相关产品推荐
相关产品推荐

