在 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

我现在的输出与此相似,而预期会出现完美细分的圆圈

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

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