栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python

>>> ["foo", "bar", "baz"].index("bar")1

参考:数据结构>列表中的更多内容

注意事项

请注意,虽然这也许是回答这个问题最彻底的方法是问,index是一个相当薄弱的组件listAPI,而我不记得我最后一次使用它的愤怒。在评论中已向我指出,由于此答案被大量引用,因此应使其更完整。有关list.index以下注意事项。可能值得一开始看看它的文档:

list.index(x[, start[, end]])

在值等于x的第一项的列表中返回从零开始的索引。ValueError如果没有此类项目,则引发a 。

可选参数start和end的解释与切片符号相同,用于将搜索限制为列表的特定子序列。返回的索引是相对于完整序列的开始而不是开始参数计算的。

列表长度的线性时间复杂度

一个index调用检查,以列表的每一个元素,直到它找到一个匹配。如果你的列表很长,并且你大概不知道它在列表中的哪个位置,则此搜索可能会成为瓶颈。在这种情况下,你应该考虑使用其他数据结构。请注意,如果你大致知道在哪里找到匹配项,则可以给出index提示。例如,在此代码段中,l.

index(999_999, 999_990, 1_000_000)
它比straight快大约五个数量级
l.index(999_999)
,因为前者只需要搜索10个条目,而后者要搜索一百万个:

>>> import timeit>>> timeit.timeit('l.index(999_999)', setup='l = list(range(0, 1_000_000))', number=1000)9.356267921015387>>> timeit.timeit('l.index(999_999, 999_990, 1_000_000)', setup='l = list(range(0, 1_000_000))', number=1000)0.0004404920036904514

仅将第一个匹配项的索引返回到其参数

呼叫

index
顺序搜索列表,直到找到匹配项,然后在该处停止。如果你期望需要更多匹配项的索引,则应使用列表推导或生成器表达式。

>>> [1, 1].index(1)0>>> [i for i, e in enumerate([1, 2, 1]) if e == 1][0, 2]>>> g = (i for i, e in enumerate([1, 2, 1]) if e == 1)>>> next(g)0>>> next(g)2

我曾经使用过的大多数地方index,现在我使用列表推导或生成器表达式,因为它们更具通用性。因此,如果你打算接触index,请看看这些出色的Python功能。

如果列表中没有元素,则抛出

如果没有该项index,ValueError则调用会导致。

>>> [1, 1].index(2)Traceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: 2 is not in list

如果该项目可能不在列表中,则你应该

  1. 首先使用item in my_list(干净,可读的方法)进行检查,或者
  2. 将index呼叫包裹在一个try/except可以捕获的块中ValueError(可能更快,至少在要搜索的列表很长且通常存在项的情况下)。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号