我使用的是python。我有一个名为segments_init的坐标列表,我想把它转换成另一个系统,如下所示:
segments_init = [x1, y1, z1, x2, y2, z2, x3, y3, z3, ...]
segments_new = [x1, -z1, 0, x2, -z2, 0, x3, -z3, 0, ...]注意:每个segments_init列表是由软件内置命令在for中生成的,如下所示
for i in segments:
segment_init = ce.getVertices(ce.findByOID(segmentsOID))发布于 2016-05-17 19:42:28
>>> segments_init = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(zip(segments_init[0::3], list(map(lambda x:-x, segments_init[2::3])), [0]*(len(segments_init)//3)))
[(1, -3, 0), (4, -6, 0), (7, -9, 0)]尽管为了更好的可读性,最好将单个3d坐标组合在一起,但如果你想使列表扁平化,你可以使用以下方法:
>>> [i for l in list(zip(segments_init[0::3], list(map(lambda x:-x, segments_init[2::3])), [0]*(len(segments_init)//3))) for i in l]
[1, -3, 0, 4, -6, 0, 7, -9, 0]发布于 2016-05-17 19:59:52
使用单行列表理解:
>>> segments_init = [1,2,3,4,5,6,7,8,9]
>>>> [j if i%3 == 0 else -segments_init[i+1] if i%3 == 1 else 0 for i, j in enumerate(segments_init)]
[1, -3, 0, 4, -6, 0, 7, -9, 0]或者,使用extended slicing
>>> segments_init = [1,2,3,4,5,6,7,8,9]
>>> segments_new = list(segments_init)
>>> segments_new[1::3] = [-i for i in segments_init[2::3]]
>>> segments_new[2::3] = len(segments_init)//3 * [0]
>>> segments_new
[1, -3, 0, 4, -6, 0, 7, -9, 0]https://stackoverflow.com/questions/37274968
复制相似问题