具有有效坐标的单独列表

问题描述 投票:0回答:1

我有一个包含索引和坐标的列表的列表,格式为[i,x,y],例如:

    nodes=[[0,1,1][1,1,2],[2,2,3],[3,2,5][......]]

我想按坐标将这个列表分成较小的列表。例如,{0内的所有坐标

    nodes_1=[[0,1,1][1,1,2]]

当前,我的代码这样做:

    addNODE=[]
    deleteNODE=[]
    tl=0.0001
    for node in nodes:
        if (((Ymin-tl) <= node[1] <= (Ymax+tl)) and ((Ymin-tl) <= node[2] <= (Ymax+tl))):
            addNODE.append(node)
        else:
            deleteNODE.append(node[0])      
    nodes=addNODE

((deleteNODE是我稍后在代码中需要的另一个变量)

但是,要进行迭代的列表很大。有没有更有效的方法来达到相同的结果?

python list performance coordinates list-comprehension
1个回答
0
投票

(可能不是最好的方法,但这是一种。)

nodes --> [[0,1,1],[1,1,2],[2,2,3],[3,2,5]]coordinates' domain --> {1, 2}

考虑列表中节点的顺序无关紧要,您可以根据它们的第一个坐标(x)对它们进行排序。

sorted(nodes, key=lambda node: node[1])

然后,搜索域中的第一个元素,即1。

startIdx = nodes[:][1].index(1)  # 2 (the first index at which 1 is found)

[因此,您从startIdx开始搜索,并在每一步检查x坐标不在域之外(即,此处大于2)。如果是这样,请停止搜索。

for node in nodes[startIdx:]:
  if node[1] > 2:
    break
  if 1 <= node[2] <= 2:
    addNode.append(node)

deleteNode = [node for node in nodes if node not in addNode]
© www.soinside.com 2019 - 2024. All rights reserved.