检查列表中是否存在值的最快方法

  • 问题:
  • 知道一个值是否存在于一个列表(一个包含数百万个值的列表)中的最快方法是什么?它的索引是什么?在

    我知道列表中的所有值都是唯一的,如本例所示

    我尝试的第一个方法是(在实际代码中为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"

    来自堆栈溢出用户的建议方法(我的实际代码为2.74秒):

    a = [4,2,3,1,5,6]
    if 7 in a:
    a.index(7)

    在我的实际代码中,第一个方法需要3.81秒,第二个方法需要1.88秒。

    我是Python/scripting的初学者,有没有一种更快的方法来做同样的事情并节省更多的处理时间?在

    对我的申请进行更具体的说明:

    在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

    最清晰、最快的方法

    您也可以考虑使用集合,但从列表中构造该集合可能需要比更快的成员资格测试节省的时间更多的时间。唯一可以确定的方法是进行良好的基准测试。(这也取决于您需要什么操作)