繁体   English   中英

在 python 中迭代该列表时将元素添加到索引之间的列表

[英]adding elements to list in between indexes while iterating over that list in python

我试图遍历 3D 个点的列表,并在每组两个点之间创建一个新点,该点的距离大于一个常数值。

我试过使用缓冲区不成功,我的主要问题是每个新插入的点都需要遵守列表顺序并插入在几何上位于它之间的两点之间。

import math

#recieve v1 and maxDist from Blender

buffer = v1
offset = 0

for i in range(len(v1) - 1):
    p1 = v1[i] 
    p2 = v1[i+1]

    if (p1 - p2).length > maxDist :
        middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
        offset = offset + 1 # 
        buffer.insert(i + offset, middleNode)

v2 = buffer

# send back v2 to Blender

我现在拥有的 output 与此类似,而预期会出现完美细分的圆圈在此处输入图像描述

如果您使用单个列表而不是两个,您的解决方案会更简单。 我的方法是:

i = 0
while i < len(v1) - 1: 
    p1 = v1[i]
    p2 = v1[i + 1]

    if (p1 - p2).length > maxDist:
        middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)

        # v1[:i] = v1[0..i] and v1[i:] = v1[i..] 
        v1 = v1[:i] + middleNode + v1[i:] 
        i += 2
    else:
        i += 1

或者如果列表理解不是一个选项:

i = 0
while i < len(v1) - 1:
    p1 = v1[i]
    p2 = v1[i]

    if (p1 - p2).length > maxDist:
        middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
        v1.insert(i + 1, middleNode)
        i += 2
    else:
        i += 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM