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(可能更快,至少當搜索列表很長時,該項通常存在.)
總結
以上是生活随笔為你收集整理的python中index从列表中查_在Python中查找包含它的列表的项目的索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用安卓虚拟机运行程序时程序停止_程序运行
- 下一篇: 大白菜u盘镜像文件怎么弄 大白菜U盘制作