Python中通过操作生成多个子列表的实现问题
问题描述
我有两个列表A2和Cb_new,运行当前代码后生成的是单个列表,但我需要生成对应结构的多个子列表。
当前代码
A2=[[2, 3, 5], [3, 4, 6]] Cb_new=[[1.0, 0.0, 0.0, 0.9979508721068377, 0.0, 0.9961113206802571, 0.0, 0.0, 0.996111320680257, 0.0, 0.0]] Cb=[] for j in range(0,len(A2)): for i in range(0,len(A2[j])): Cb1=Cb_new[0][A2[j][i]] Cb.append(Cb1) print(Cb)
当前输出
[0.0, 0.9979508721068377, 0.9961113206802571, 0.9979508721068377, 0.0, 0.0]
期望输出
[[0.0, 0.9979508721068377, 0.9961113206802571], [0.9979508721068377, 0.0, 0.0]]
解决方案
问题出在你直接把所有元素都追加到了同一个大列表里,没有为A2的每个子列表创建对应的子列表。修改方法很简单:每次循环A2的子列表时,先初始化一个临时子列表,把当前子列表对应的元素都加到这个临时列表里,再把临时列表追加到Cb中。
修改后的代码:
A2=[[2, 3, 5], [3, 4, 6]] Cb_new=[[1.0, 0.0, 0.0, 0.9979508721068377, 0.0, 0.9961113206802571, 0.0, 0.0, 0.996111320680257, 0.0, 0.0]] Cb=[] for j in range(len(A2)): # 每次循环A2的子列表时,创建一个临时子列表 sub_list = [] for i in range(len(A2[j])): Cb1=Cb_new[0][A2[j][i]] sub_list.append(Cb1) # 把临时子列表追加到Cb中 Cb.append(sub_list) print(Cb)
你也可以用更简洁的列表推导式实现:
A2=[[2, 3, 5], [3, 4, 6]] Cb_new=[[1.0, 0.0, 0.0, 0.9979508721068377, 0.0, 0.9961113206802571, 0.0, 0.0, 0.996111320680257, 0.0, 0.0]] Cb = [[Cb_new[0][idx] for idx in sub] for sub in A2] print(Cb)
运行以上代码就能得到你想要的嵌套列表结构。
内容的提问来源于stack exchange,提问作者isaacmodi123
相关产品推荐
相关产品推荐

