1. 程式人生 > 程式設計 >對python中list的五種查詢方法說明

對python中list的五種查詢方法說明

Python中是有查詢功能的,五種方式:in、not in、count、index,find 前兩種方法是保留字,後兩種方式是列表的方法。

下面以a_list = ['a','b','c','hello'],為例作介紹:

對python中list的五種查詢方法說明

string型別的話可用find方法去查詢字串位置:

a_list.find('a')

如果找到則返回第一個匹配的位置,如果沒找到則返回-1,而如果通過index方法去查詢的話,沒找到的話會報錯。

對python中list的五種查詢方法說明

補充知識:Python中查詢包含它的列表元素的索引,index報錯!!!

對於列表["foo","bar","baz"]和列表中的專案"bar",如何在Python中獲取其索引(1)?

一、index

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

警告如下

請注意,雖然這也許是回答這個問題最徹底的方法是問,index是一個相當薄弱的元件listAPI,而我不記得我最後一次使用它的憤怒。在評論中已經向我指出,因為這個答案被大量引用,所以應該更加完整。關於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.

我曾經使用過的大多數地方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

如果該專案可能不在列表中,您應該

首先檢查它item in my_list(乾淨,可讀的方法),或

將index呼叫包裹在try/except捕獲的塊中ValueError(可能更快,至少當搜尋列表很長時,該項通常存在。)

二、enumerate()

大多數答案解釋瞭如何查詢單個索引,但如果專案在列表中多次,則它們的方法不會返回多個索引。用途enumerate():

for i,j in enumerate(['foo','bar','baz']):
  if j == 'bar':
    print(i)

該index()函式僅返回第一個匹配項,同時enumerate()返回所有匹配項。

作為列表理解:

[i for i,'baz']) if j == 'bar']

這裡還有另一個小解決方案itertools.count()(與列舉幾乎相同):

from itertools import izip as zip,count # izip for maximum efficiency

[i for i,j in zip(count(),['foo','baz']) if j == 'bar']

對於較大的列表,這比使用更有效enumerate():

$ python -m timeit -s "from itertools import izip as zip,count" "[i for i,'baz']*500) if j == 'bar']"
10000 loops,best of 3: 174 usec per loop
$ python -m timeit "[i for i,best of 3: 196 usec per loop

三、NumPy

如果您想要所有索引,那麼您可以使用NumPy:

import numpy as np
 
array = [1,2,1,3,4,5,1]
item = 1
np_array = np.array(array)
item_index = np.where(np_array==item)
print item_index
# Out: (array([0,6],dtype=int64),)

它是清晰易讀的解決方案。

四、zip

具有該zip功能的所有索引:

get_indexes = lambda x,xs: [i for (y,i) in zip(xs,range(len(xs))) if x == y]
 
print get_indexes(2,[1,6,2])
print get_indexes('f','xsfhhttytffsafweef')

以上這篇對python中list的五種查詢方法說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。