当前位置: 首页 > 面试题库 >

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

冯峻
2023-03-14
问题内容

知道列表中是否存在值(列表中包含数百万个值)及其索引是什么的最快方法是什么?

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

我尝试的第一种方法是(在我的实际代码中为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 /脚本的初学者,有没有更快的方法来做相同的事情并节省更多的处理时间?

我的应用程序更具体的说明:

在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,但是从列表中构造该集合所花费的时间可能比更快的成员资格测试所节省的时间还多。唯一可以确定的基准就是基准测试。(这还取决于您需要执行哪些操作)



 类似资料:
  • 问题内容: 我有这样的示例列表: 现在,我检查它是否具有空字符串,如下所示: 这可以正常工作,因为它可以打印True,但是是否需要更多的pythonik方法? 问题答案: 您可以使用: 万一如果内部列表更大(超过100个项目),则与生成器一起使用的速度将比上面的示例更快,因为这样,使用Python for循环的速度代价将由快速操作来补偿: 时序比较:

  • 问题内容: 我想知道是否有一种方法可以检查Redis列表中是否已存在密钥? 我不能使用集合,因为我不想强制唯一性,但是我确实希望能够检查字符串是否确实存在。 问题答案: 您的选择如下: 如果发现并使用并替换它。 与您的个人保持独立 循环浏览直到找到项目或到达末尾。 Redis列表是作为http://en.wikipedia.org/wiki/Linked_list实现的,因此存在局限性。 我认为您

  • 问题内容: 我想编写一个确定子列表是否存在于较大列表中的函数。 有Python函数可以做到这一点吗? 问题答案: 如果您确定输入内容仅包含数字0和1,那么可以转换为字符串: 这样会创建两个字符串,因此它不是最有效的解决方案,但是由于它利用了Python中优化的字符串搜索算法,因此对于大多数用途而言可能已经足够好了。 如果效率非常重要,则可以查看适用于列表的Boyer- Moore 字符串搜索算法。

  • 我需要验证表中是否已经存在列。我的类扩展了CustomTaskChange,因此我的方法接收一个数据库对象作为参数。我可以通过ResultSetObject进行我想要的验证吗?

  • 问题内容: 我有一个Python字典列表,如下所示: 我想检查列表中是否已存在具有特定键/值的字典,如下所示: 问题答案: 这是一种实现方法: 括号中的部分是一个生成器表达式,该表达式将为每个具有要查找的键值对的字典返回,否则为。 如果密钥也可能丢失,则上面的代码可以给您一个。您可以通过使用并提供默认值来解决此问题。如果不提供 默认 值,则返回。