首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表元素的系统化修改

列表元素的系统化修改
EN

Stack Overflow用户
提问于 2016-05-17 19:34:42
回答 2查看 35关注 0票数 0

我使用的是python。我有一个名为segments_init的坐标列表,我想把它转换成另一个系统,如下所示:

代码语言:javascript
复制
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中生成的,如下所示

代码语言:javascript
复制
for i in segments:
    segment_init = ce.getVertices(ce.findByOID(segmentsOID))
EN

回答 2

Stack Overflow用户

发布于 2016-05-17 19:42:28

代码语言:javascript
复制
>>> 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坐标组合在一起,但如果你想使列表扁平化,你可以使用以下方法:

代码语言:javascript
复制
>>> [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]
票数 0
EN

Stack Overflow用户

发布于 2016-05-17 19:59:52

使用单行列表理解:

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> 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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37274968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档