python中index从列表中查_在Python中查找包含它的列表的项目的索引

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

1

警告如下

请注意,虽然这可能是回答问题的最简洁方法,但索引是列表API的一个相当弱的组件,我不记得上次我在愤怒中使用它了.在评论中已经向我指出,因为这个答案被大量引用,所以应该更加完整.关于list.index的一些警告如下.最初可能需要查看文档字符串:

>>> print(list.index.__doc__)

L.index(value, [start, [stop]]) -> integer -- return first index of value.

Raises ValueError if the value is not present.

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

索引调用按顺序检查列表中的每个元素,直到找到匹配项.如果您的列表很长,并且您不知道列表中的大致位置,则此搜索可能会成为瓶颈.在这种情况下,您应该考虑不同的数据结构.请注意,如果您大致知道匹配的位置,则可以为索引提供提示.例如,在这个片段中,l.index(999_999,999_990,1_000_000)比直接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

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

对索引的调用按顺序搜索列表,直到找到匹配项,然后停在那里.如果您希望需要更多匹配的索引,则应使用列表推导或生成器表达式.

>>> [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

我曾经使用过索引的大多数地方,我现在使用列表推导或生成器表达式,因为它们更具有推广性.因此,如果您正在考虑使用索引,请查看这些出色的python功能.

如果元素不在列表中,则抛出

如果项目不存在,则对index的调用会导致ValueError.

>>> [1, 1].index(2)

Traceback (most recent call last):

File "", line 1, in

ValueError: 2 is not in list

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

>首先使用my_list中的项目(干净,可读的方法)检查??它,或者

>将索引调用包装在try / except块中,该块捕获ValueError(可能更快,至少当搜索列表很长时,该项通常存在.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值