在python中以编程方式追加列表

在python中以编程方式追加列表,python,list,abaqus,Python,List,Abaqus,我在程序上添加两个列表时遇到一些问题。我想知道点列表是位于边上还是多边形内部(它们不能位于多边形外部)。我拥有的是: “pedges”是Abaqus中形成闭合多边形的边列表 “区域”是一个“浮动”列表 有一个名为getDistance的内置函数,我确信它运行良好(来自Abaqus) a) 如果一个点位于边缘上,则此位置的区域将添加到区域\u onEdge=[] b) 如果一个点不在边缘上,则此位置的区域将添加到区域_inside=[] 最后我计算sum(内部面积)/areaShell 我尝试了一

我在程序上添加两个列表时遇到一些问题。我想知道点列表是位于边上还是多边形内部(它们不能位于多边形外部)。我拥有的是:

  • “pedges”是Abaqus中形成闭合多边形的边列表

  • “区域”是一个“浮动”列表

  • 有一个名为
    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)