在python中以编程方式追加列表
我在程序上添加两个列表时遇到一些问题。我想知道点列表是位于边上还是多边形内部(它们不能位于多边形外部)。我拥有的是:在python中以编程方式追加列表,python,list,abaqus,Python,List,Abaqus,我在程序上添加两个列表时遇到一些问题。我想知道点列表是位于边上还是多边形内部(它们不能位于多边形外部)。我拥有的是: “pedges”是Abaqus中形成闭合多边形的边列表 “区域”是一个“浮动”列表 有一个名为getDistance的内置函数,我确信它运行良好(来自Abaqus) a) 如果一个点位于边缘上,则此位置的区域将添加到区域\u onEdge=[] b) 如果一个点不在边缘上,则此位置的区域将添加到区域_inside=[] 最后我计算sum(内部面积)/areaShell 我尝试了一
getDistance
的内置函数,我确信它运行良好(来自Abaqus)
a) 如果一个点位于边缘上,则此位置的区域将添加到区域\u onEdge=[]
b) 如果一个点不在边缘上,则此位置的区域将添加到区域_inside=[]
sum(内部面积)/areaShell
areaShell=368.97;
areas_onEdge=[]
areas_inside=[]
points=[(923.9,562.0244,0),(923.9,570.8333,0),(914.1,568.6853,0),(923.9,554.1,0),(928.8,568.6853,0),(919,579.2,0)]
areas=[787.2464,368.97,73984.02,42012.99,73984.02,44627.33]
print 'points Inter '.join(map(str,points));
print 'Areas Inter '.join(map(str,areas));
for i in range(0,len(areas)-1):
if p.getDistance(points[i],pedges[i])< 0.0001: #Distance between a point and an edge
areas_onEdge.append(areas[i])
else:
areas_inside.append(areas[i])
result=sum(areas_inside)/areaShell
也许,您的问题在于for循环 首先,您没有遍历所有区域,因为您的范围仅限于
len(areas)-1
。在Python中,范围的结束分隔符不包括在生成的列表中,例如,range(0,5)
生成列表[0,1,2,3,4]
此外,您只将每个点与一条边进行比较,据我所知,您希望将一个点与所有边进行比较
这个循环修正了我在这里提出的两点:
for i in range(len(areas)):
is_on_edge = False
for j in range(len(pedges)):
if p.getDistance(points[i], pedges[j]) < 0.0001:
areas_onEdge.append(areas[i])
is_on_edge = True
break
if not is_on_edge:
areas_inside.append(areas[i])
范围内的i(len(区域)):
_在_边上=False
对于范围内的j(len(pedges)):
如果p.getDistance(点[i],点[j])<0.0001:
areas_onEdge.append(区域[i])
_在_边上=真吗
打破
如果不在边缘上:
区域\内部追加(区域[i])
这是做同样事情的另一种方式(在我看来更像是蟒蛇):
对于邮政编码中的点、面积(点、面积):
边距离=[p.getDistance(点,pedge)表示pedge中的pedge]
如果最小值(边缘距离)<0.0001:
区域_onEdge.append(区域)
其他:
内部区域\附加(区域)
您所说的“不工作”是什么意思,请澄清您的问题!您遇到的问题在哪里?是否有任何错误或错误的结果?最有可能的是,您的问题是,您只检查了一条边上的一个点。您需要检查每个边上的一个点,以查看该点是否位于给定多边形的任何边上。在编辑中应为pedges[j]
。(不知道为什么你首先复制了一个答案)对于你的第一个解决方案,如果找到,你应该打破j
循环。在找到后,不需要继续迭代。另外,pedges[j]
是否可以做类似的压缩3个列表的事情?请参阅我的编辑,您可以将3个列表压缩在一起。请注意,zip会将所有列表限制为最小列表的大小。例如,如果两个列表a,b
各有10个元素,第三个列表c
仅包含5个元素,则压缩列表zip(a,b,c)
将包含5个元素。请参阅此处的更多信息:
for point, area,areaR in zip(pointsInter_proj, areasInter,areasRev):
edges_distances = [p.getDistance(point, pedge) for pedge in pedges]
if min(edges_distances) >=0:
ratt.append(area/areaR);
for i in range(len(areas)):
is_on_edge = False
for j in range(len(pedges)):
if p.getDistance(points[i], pedges[j]) < 0.0001:
areas_onEdge.append(areas[i])
is_on_edge = True
break
if not is_on_edge:
areas_inside.append(areas[i])
for point, area in zip(points, areas):
edges_distances = [p.getDistance(point, pedge) for pedge in pedges]
if min(edges_distances) < 0.0001:
areas_onEdge.append(area)
else:
areas_inside.append(area)