我有一个包含索引和坐标的列表的列表,格式为[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是我稍后在代码中需要的另一个变量)
但是,要进行迭代的列表很大。有没有更有效的方法来达到相同的结果?
(可能不是最好的方法,但这是一种。)
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]