Python在列表中查找项目索引的最快方法 [英] Python Fastest way to find Indexes of item in list

查看:717
本文介绍了Python在列表中查找项目索引的最快方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

If one was to attempt to find the indexes of an item in a list you could do it a couple different ways here is what I know to be the fastest

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

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

Another way not pythonic and slower

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)

毫无疑问,第一种方法会更快,但是如果您想更快一点,该怎么办呢?第一个使用方法的索引

the first method is undoubtedly faster however what if you wanted to go faster is there a way? for the first index using method

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

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

is very fast but cant handle multiple indexes How might one go about speeding things up?

推荐答案

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

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

Assuming you want a list as your output: All options seemed exhibit similar time performance for my test with the list comprehension being the fastest (barely).

如果您对返回生成器很满意,那么它比其他方法要快得多.认为它并没有考虑实际对索引进行迭代,也没有存储索引,因此无法再次对inds进行迭代.

And if you're cool with returning a generator, it's way faster than the other approaches. Thought it doesn't account for actually iterating over the indices, nor does it store them, so the inds cannot be iterated over a second time.

这篇关于Python在列表中查找项目索引的最快方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆