我有一个3D点列表,我正在尝试将其映射到列表,如下所示:
plot = map(lambda x: (x[0], x[1], x[2], voxelGrid[x]), data)
这不符合我的要求。
意图是plot[0]
保存来自第一个数据索引的所有值,plot[1]
以保存第二个索引中的所有值,依此类推。
通过对我想要分组的每个不同的值执行列表理解,我可以非常低效地执行此操作,但我觉得有更好的方法。
数据
data = [(35, 35, 32), (35, 36, 33), (35, 38, 34)...] # xyz points
voxelGrid是一个3D numpy数组,其中包含上述每个点的值。
我正在尝试获得此输出:
plot = [(35,35,35),(35,36,38), (32,33,34), (voxelGrid[first point], voxelGrid[second point], voxelGrid[third point])]
答案 0 :(得分:2)
将zip(*)
与tuple()
和生成器表达式一起使用:
zip(*data) + [tuple(voxelGrid[x] for x in data)]
答案 1 :(得分:0)
>>> data = [(35, 35, 32), (35, 36, 33), (35, 38, 34)]
>>> zip(*data)
[(35, 35, 35), (35, 36, 38), (32, 33, 34)]
答案 2 :(得分:0)
plot = zip(*[(x[0], x[1], x[2], voxelGrid[x]) for x in data])