Python在列表中查找项目索引的最快方法

发布于 2021-01-29 14:55:13

如果要尝试在列表中查找某项的索引,则可以采用几种不同的方法来完成,这就是我所知道的最快的方法

aList = [123, 'xyz', 'zara','xyz', 'abc']; 
indices = [i for i, x in enumerate(aList) if x == "xyz"]
print(indices)

另一种方式不是pythonic且速度较慢

count = 0
indices = []
aList = [123, 'xyz', 'zara','xyz', 'abc'];
for i in range(0,len(aList):
    if 'xyz' == aList[i]:
        indices.append(i)
print(indices)

第一种方法无疑是更快的方法,但是如果您想更快地进行操作,那该怎么办呢?对于第一个索引使用方法

aList = [123, 'xyz', 'zara','xyz', 'abc'];             
print "Index for xyz : ", aList.index( 'xyz' )

速度很快,但无法处理多个索引如何加快速度?

关注者
0
被浏览
133
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    def find(target, myList):
        for i in range(len(myList)):
            if myList[i] == target:
                yield i
    
    def find_with_list(myList, target):
         inds = []
         for i in range(len(myList)):
             if myList[i] == target:
                 inds += i,
         return inds
    
    
    In [8]: x = range(50)*200
    In [9]: %timeit [i for i,j in enumerate(x) if j == 3]
    1000 loops, best of 3: 598 us per loop
    
    In [10]: %timeit list(find(3,x))
    1000 loops, best of 3: 607 us per loop
    In [11]: %timeit find(3,x)
    1000000 loops, best of 3: 375 ns per loop
    
    In [55]: %timeit find_with_list(x,3)
    1000 loops, best of 3: 618 us per loop
    

    假设您想要一个列表作为输出:对于我的测试,所有选项似乎都表现出相似的时间性能,列表理解最快(几乎没有)。

    而且,如果您对返回发电机感到很满意,那么它比其他方法要快得多。认为它并没有考虑实际对索引进行迭代,也不存储索引,因此无法再次对inds进行迭代。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看