Python 有没有比当前方法更快生成newlist.append(q)list的建议?

Python 有没有比当前方法更快生成newlist.append(q)list的建议?,python,python-2.7,python-3.x,numpy,Python,Python 2.7,Python 3.x,Numpy,嗨,我正试图通过使用下面提到的代码生成一个元素q的列表 newlist=[] coords=pn['point.coords'][z>=0.001950] points=range(27000) for q in points: if pn['point.coords'][q] in coords: newlist.append(q) 这里的pn['point.coords']是点的x,y,z坐标列表,我想创建一个新的点列表,其中z>=0.001950。x,y,

嗨,我正试图通过使用下面提到的代码生成一个元素q的列表

newlist=[]
coords=pn['point.coords'][z>=0.001950]
points=range(27000)
for q in points:
    if pn['point.coords'][q] in coords: 
        newlist.append(q)
这里的
pn['point.coords']
是点的
x,y,z
坐标列表,我想创建一个新的点列表,其中
z>=0.001950
x,y,z
的总限制为
0到0.002
。代码运行缓慢。有没有更快的方法来获取这个新列表

见。numpy的方式是

coords = pn['point.coords']
z = coords[:,2]
q, = np.where(z>0.001950)
high_points=coords[q]
另一点是,这是一个线性时间计划。 你的是二次的,因为坐标中的p有一个隐藏的复杂性。
对于
zmax
的较小值,执行时间将快速增加

你试过numpy.where函数吗?在坐标系中有很多线性时间搜索。排序并使用二进制搜索(如果足够大)。目前它看起来像O(n_点*n_坐标)复杂度。你不能用
坐标创建
集合
?(它不符合numpy标准,但如果有效的话…@VinceW。如何使用numpy.where解决此问题。我不熟悉这个功能?(萨沙)我不明白你所说的多次线性搜索是什么意思。我怎么做二进制搜索?不。。。它是关于1d查找的,不管是使用python还是numpy的bin搜索。这是一个非常基本的数据结构问题,包括关于线性搜索、平衡搜索树和基于散列的集的决策(该决策取决于未给出的细节)。speed comparion?@B.M.Superful回答。代码以前需要4秒,现在需要0.29秒。非常感谢你。