知道一个值是否存在于一个列表(一个包含数百万个值的列表)中以及它的索引是什么的最快方法是什么?
我知道列表中的所有值都是唯一的,如本例所示。
我尝试的第一种方法是(在我的真实代码中为 3.8 秒):
a = [4,2,3,1,5,6] if a.count(7) == 1: b=a.index(7) "Do something with variable b"
我尝试的第二种方法是(快 2 倍:我的真实代码为 1.9 秒):
a = [4,2,3,1,5,6] try: b=a.index(7) except ValueError: "Do nothing" else: "Do something with variable b"
Stack Overflow 用户提出的方法(我的真实代码为 2.74 秒):
a = [4,2,3,1,5,6] if 7 in a: a.index(7)
在我的真实代码中,第一种方法需要 3.81 秒,第二种方法需要 1.88 秒。这是一个很好的改进,但是:
我是 Python/脚本的初学者,有没有更快的方法来做同样的事情并节省更多的处理时间?
我的应用程序的更具体解释:
在 Blender API 中,我可以访问粒子列表:
particles = [1, 2, 3, 4, etc.]
从那里,我可以访问粒子的位置:
particles[x].location = [x,y,z]
对于每个粒子,我通过搜索每个粒子位置来测试是否存在邻居,如下所示:
if [x+1,y,z] in particles.location "Find the identity of this neighbour particle in x:the particle's index in the array" particles.index([x+1,y,z])
7 in a
最清晰和最快的方法。
您也可以考虑使用set,但是从您的列表中构建该集合可能需要比更快的成员资格测试节省的更多时间。唯一可以确定的方法是做好基准测试。(这也取决于您需要什么操作)
set