在 Python 中找到列表中元素的索引

  1. 在 Python 中使用列表 index() 方法查詢列表的索引
  2. 在 Python 中使用 numpy.where() 查詢列表的索引
在 Python 中找到列表中元素的索引

本教程將演示如何在 Python 列表中查詢元素的位置或索引。

在 Python 中使用列表 index() 方法查詢列表的索引

Python 列表有一個內建的方法叫做 index(),該方法接受一個表示要在現有列表中搜尋的值的引數。該函式將返回從索引 0 開始找到的第一次出現的索引,而不管它在列表中出現了多少次。

例如,宣告一個含有重複值 20 的列表,並呼叫方法 index(20) 並列印返回的內容。

lst = [13, 4, 20, 15, 6, 20, 20]

print(lst.index(20))

輸出:

2

lst 陣列中第一次出現的 20 值是在索引 2 上,這是函式呼叫的結果。具有相同值的其他元素將被忽略,因為它已在列表中找到匹配項。

如果給定列表中不存在某個值,而我們將傳遞不存在的值稱為 index(),會發生什麼情況?讓我們以這個為例。

lst = [13, 4, 20, 15, 6, 20, 20]

print(lst.index(21))

輸出:

ValueError: 21 is not in list

如果在列表中找不到索引,則該函式將引發錯誤。在某些情況下,這可能不利於呼叫錯誤。為避免這種情況,請使用 try...except 塊捕獲錯誤,並進行處理,以使如果列表中不存在索引,則將其分配為 -1

lst = [13, 4, 20, 15, 6, 20, 20]

try:
    ndx = lst.index(21)
except:
    ndx = -1

print(ndx)

輸出:

-1

這樣,就不必呼叫顯式錯誤,並且程式可以在操作後繼續執行。

在 Python 中使用 numpy.where() 查詢列表的索引

NumPy 模組具有一個稱為 where() 的預定義函式,該函式用於在一個檔案中查詢多個元素,它接受一個跟定的條件。

在這種情況下,我們將專門使用 where() 來查詢給定值的索引。與內建的 index() 函式不同,where() 函式可以返回值所在的索引列表,如果該值在列表中存在多次。如果你需要該值的所有出現,而不僅僅是第一次出現,這就很有用。

第一步是將 Python 列表轉換成 NumPy 陣列。為此,請呼叫函式 np.array()

import numpy as np

lst = np.array(lst=[13, 4, 20, 15, 6, 20, 20])

初始化 NumPy 陣列後,我們只需要填充 where() 的第一個引數。將第一個引數初始化為 lst == 20 以找到值 20 的給定列表索引。

import numpy as np

lst = [13, 4, 20, 15, 6, 20, 20]

lst = np.array(lst)

result = np.where(lst == 20)

print(result)

輸出:

(array([2, 5, 6]),)

由於 NumPy 主要處理矩陣,因此 where() 函式將返回一個陣列的元組,而不是單個列表。如果只輸出單個列表是首選的,則呼叫結果的第一個索引,然後使用 print() 將其輸出。

import numpy as np

lst = [13, 4, 20, 15, 6, 20, 20]

lst = np.array(lst)

result = np.where(lst == 20)

print(result[0])

輸出:

[2 5 6]

請注意,NumPy 陣列由單個空格而不是普通逗號定界。

總之,index() 函式是在 Python 列表中查詢元素位置的最簡單方法。雖然,此函式僅返回給定值首次出現的索引。

如果存在該值的多個例項,則要返回多個索引,則可以選擇使用 NumPy 模組中的 where() 函式。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相關文章 - Python List