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