Python中如何将生成的列表封装为嵌套子列表?
问题描述
我拥有列表J和numpy数组MaxPr,通过循环创建新列表Max Pr new,但需要将该列表封装为嵌套子列表形式。以下是当前实现代码、当前输出与期望输出:
当前代码
import numpy as np arMaxPrnew=[] J=[[1, 2, 8, 9, 11, 12, 13, 16, 17, 18, 21, 24, 25, 26, 27, 31, 33, 36, 37, 38]] MaxPr=np.array([423.056174 , 368.757486 , 339.165087 , 339.165087 , 423.056174 , 423.056174 , 368.757486 , 339.165087 , 339.165087 , 423.056174 , 368.757486 , 339.165087 , 339.165087 , 294.817814 , 313.653565 , 313.653565 , 276.03611 , 0. , 294.817814 , 313.653565 , 276.03611 , 18.388115 , 294.817814 , 294.817814 , 294.817814 , 197.811705 , 18.388115 , 294.817814 , 294.817814 , 197.811705 , 37.2027264, 294.817814 , 294.817814 , 294.817814 , 114.343795 , 37.2027264, 294.817814 , 294.817814 , 114.343795 , 37.2027264]) for i in range(0,len(J[0])): MaxPrnew=MaxPr[J[0][i]] arMaxPrnew.append(MaxPrnew) MaxPrnew=list(arMaxPrnew) print("Max Pr new =",MaxPrnew)
当前输出
Max Pr new = [368.757486, 339.165087, 339.165087, 423.056174, 339.165087, 339.165087, 294.817814, 276.03611, 0.0, 294.817814, 18.388115, 294.817814, 197.811705, 18.388115, 294.817814, 294.817814, 294.817814, 294.817814, 294.817814, 114.343795]
期望输出
Max Pr new = [[368.757486, 339.165087, 339.165087, 423.056174, 339.165087, 339.165087, 294.817814, 276.03611, 0.0, 294.817814, 18.388115, 294.817814, 197.811705, 18.388115, 294.817814, 294.817814, 294.817814, 294.817814, 294.817814, 114.343795]]
解决方案
方法1:直接嵌套结果列表
修改打印语句,将生成的列表包裹进一个新列表即可:
print("Max Pr new =", [MaxPrnew])
或者在循环结束后重新赋值:
MaxPrnew = [MaxPrnew] print("Max Pr new =", MaxPrnew)
方法2:初始化时使用嵌套列表
一开始就把存储结果的容器定义为嵌套列表,每次往子列表中追加元素:
import numpy as np arMaxPrnew = [[]] # 初始化为嵌套列表 J=[[1, 2, 8, 9, 11, 12, 13, 16, 17, 18, 21, 24, 25, 26, 27, 31, 33, 36, 37, 38]] MaxPr=np.array([423.056174 , 368.757486 , 339.165087 , 339.165087 , 423.056174 , 423.056174 , 368.757486 , 339.165087 , 339.165087 , 423.056174 , 368.757486 , 339.165087 , 339.165087 , 294.817814 , 313.653565 , 313.653565 , 276.03611 , 0. , 294.817814 , 313.653565 , 276.03611 , 18.388115 , 294.817814 , 294.817814 , 294.817814 , 197.811705 , 18.388115 , 294.817814 , 294.817814 , 197.811705 , 37.2027264, 294.817814 , 294.817814 , 294.817814 , 114.343795 , 37.2027264, 294.817814 , 294.817814 , 114.343795 , 37.2027264]) for i in range(0,len(J[0])): MaxPrnew=MaxPr[J[0][i]] arMaxPrnew[0].append(MaxPrnew) # 往第一个子列表追加元素 MaxPrnew = arMaxPrnew print("Max Pr new =", MaxPrnew)
方法3:利用numpy索引直接生成(更高效)
借助numpy的批量索引特性,直接获取目标元素后转成嵌套列表:
import numpy as np J=[[1, 2, 8, 9, 11, 12, 13, 16, 17, 18, 21, 24, 25, 26, 27, 31, 33, 36, 37, 38]] MaxPr=np.array([423.056174 , 368.757486 , 339.165087 , 339.165087 , 423.056174 , 423.056174 , 368.757486 , 339.165087 , 339.165087 , 423.056174 , 368.757486 , 339.165087 , 339.165087 , 294.817814 , 313.653565 , 313.653565 , 276.03611 , 0. , 294.817814 , 313.653565 , 276.03611 , 18.388115 , 294.817814 , 294.817814 , 294.817814 , 197.811705 , 18.388115 , 294.817814 , 294.817814 , 197.811705 , 37.2027264, 294.817814 , 294.817814 , 294.817814 , 114.343795 , 37.2027264, 294.817814 , 294.817814 , 114.343795 , 37.2027264]) # 用J的子列表批量索引MaxPr,再转成嵌套列表 MaxPrnew = MaxPr[J[0]].tolist() MaxPrnew = [MaxPrnew] print("Max Pr new =", MaxPrnew)
内容的提问来源于stack exchange,提问作者AEinstein
相关产品推荐
相关产品推荐

