python将数据映射到列表/元组列表

时间:2015-02-02 03:24:00

标签: python list numpy list-comprehension

我有一个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])]

3 个答案:

答案 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])