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

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

李华茂
2023-03-14
问题内容

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

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' )

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


问题答案:
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进行迭代。



 类似资料:
  • 问题内容: 我有一个清单清单: 搜索列表并返回其中一项的位置的最干净方法是什么? 我已经看过该方法,但是似乎并没有在列表中解压缩列表。 给出:,不是我所期望的… 问题答案: 我会做这样的事情: 这将返回一个元组列表,其中第一个索引是第一个列表中的位置,第二个索引是第二个列表中的位置(注意:您要查找的颜色,即)。 对于问题中的示例,返回值为: 如果您只需要懒惰地找到找到颜色的第一个位置,则可以使用以

  • 问题内容: 当您执行类似列表在哪里的操作时,python会在列表上进行顺序搜索吗​​?还是创建哈希表表示来优化查找?在应用程序中,我需要这样做,因为我将在列表上进行很多查找,所以最好先执行诸如此类的操作,然后执行?还要注意,我将拥有的值列表将没有重复的数据,而且我实际上并不在乎它的顺序。我只需要能够检查值的存在。 问题答案: 还要注意,我将拥有的值列表将没有重复的数据,而且我实际上并不在乎它的顺序

  • 问题内容: 我很新,我希望它不太明显,但是我似乎无法为以下问题找到一个简短而准确的答案。 我有两个清单: 我想查找第二个列表()的所有索引何时在第一个列表()中,以便得到如下内容: b在a中的索引:或 问题答案: 具有列表理解: 或使用for循环:

  • 我试图通过搜索来查找。有人知道怎么做吗? 我看到有但我想要类似python的。

  • 问题内容: 我正在尝试使用Java 8流和lambda表达式进行顺序搜索。这是我的代码 我知道总是打印第一次出现的索引。如何打印所有索引? 问题答案: 首先,使用Lambdas并不是解决所有问题的方法…但是,即使如此,作为for循环,您也可以编写它: 现在,这没有什么特别的错误,但是请注意,这里的关键方面是索引,而不是值。索引是“循环”的输入和输出。 作为流: 产生输出:

  • 问题内容: -我只是解析了一个大文件,然后创建了一个包含42.000个字符串/单词的列表。我想查询[针对此列表]以检查给定的单词/字符串是否属于它。所以我的问题是: 进行查找的最有效方法是什么? 第一种方法是对列表()进行排序,然后使用 这确实是微不足道的,我相信有更好的方法可以做到。我的目标是应用快速查找来查找给定字符串是否在此列表中。如果您对其他数据结构有任何想法,欢迎使用。但是,我现在想避免