Skip to main content
 首页 » 编程设计

python之列表编辑的高效算法

2025年05月04日9lonelyxmas

我有一个 3D 点云,保存在两个列表中。具有 5 个点 (x,y,z) 的示例:(3,3,3), (1,1,1), (4,4,4), (2,2,2), (5,5,5 ) -> 我的列表如下所示:

z = [3, 1, 4, 2, 5] # the z values 
pts = [(3,3), (1,1), (4,4), (2,2), (5,5)] # the x and y values 

现在我想消除 z 值高于 3 的所有值:

# what I want to receive: 
z = [3, 1, 2] 
pts = [(3,3), (1,1), (2,2)] 

我的算法在这里:

k = -1 
for i in range(len(z)): 
    k += 1 
    if z[k] > h: 
        z.pop(k) 
        pts.pop(k) 
        k -= 1 

这会返回我想要的结果 - 但速度非常慢(对于 >100,000 个值)。 我考虑过先通过 z.sort() 对我的列表进行排序,然后执行 z = z[:index] - 但是当我对我的 z-list 执行此操作时,我的 pts-list 仍然未排序。即使我可以对两个列表进行排序,我是否也必须通过一个很长的 loop 来找到我的条件为 true 的索引? 有谁知道更有效的解决方案?

请您参考如下方法:

z, pts = zip(*[(z, pt) for z, pt in zip(z, pts) if z <= 3]) 
print z, pts 

输出

(3, 1, 2) ((3, 3), (1, 1), (2, 2))