Python - 獲取列表中所有元素出現的位置


為了使用 Python 獲取列表中特定元素所有出現位置的索引,我們可以使用一些方法,例如使用 for 迴圈、使用列表推導式、使用 enumerate() 函式、在 while 迴圈中使用 index() 方法等。在本文中,我們將探討這些不同的方法,並執行操作以獲取列表中所有元素出現位置的索引。

方法 1:使用 for 迴圈

在這種方法中,我們開始遍歷列表,並將每個元素與所需的元素進行比較。如果元素匹配,我們將它的索引新增到索引列表中。

演算法

  • 初始化一個名為 indices 的空列表,用於儲存出現位置的索引。

  • 使用 for 迴圈和 range() 函式遍歷列表。

  • 檢查索引 i 處的當前元素是否等於所需的元素。

  • 如果是,則將索引 i 附加到 indices 列表中。

  • 返回 indices 列表。

語法

for i in range(len(lst)):
        if lst[i] == element:
            indices.append(i)

這裡,在 for 迴圈中,變數 i 遍歷列表的長度,並將列表的每個元素與所需的元素進行比較。indices.append(i) 在元素匹配時將索引附加到 indices 列表中。

示例

在下面的示例中,我們查詢並列印列表 'my_list' 中元素 '3' 的所有出現位置的索引。'get_indices()' 函式以元素和列表作為引數被呼叫,它返回一個索引列表。然後使用 'print()' 函式列印此列表。

def get_indices(element, lst):
    indices = []
    for i in range(len(lst)):
        if lst[i] == element:
            indices.append(i)
    return indices
my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

輸出

[0, 3, 5]

方法 2:使用列表推導式

此方法允許我們建立一個包含所需元素所有出現位置的索引的新列表。

演算法

  • 使用列表推導式生成一個新的索引列表。

  • 使用 range() 函式遍歷列表。

  • 如果該索引處的元素與所需的元素匹配,則將索引 i 包含在新列表中。

  • 返回新列表。

語法

[i for i in range(len(lst)) if lst[i] == element]

這裡,列表推導式檢查列表中的每個元素,並將其與所需的元素進行比較。如果匹配,我們可以列印索引。

示例

def get_indices(element, lst):
    return [i for i in range(len(lst)) if lst[i] == element]


my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

輸出

[0, 3, 5]

方法 3:使用 enumerate() 函式

enumerate() 函式是 Python 中一個有用的工具,它簡化了遍歷列表並在跟蹤索引和相應元素的同時進行操作。此方法允許我們直接獲取所需元素所有出現位置的索引。

演算法

  • 利用列表推導式建立一個新的索引列表。

  • 使用 enumerate() 函式遍歷列表,該函式同時提供索引 i 和元素 x。

  • 如果元素 x 與所需的元素匹配,則將索引 i 包含在新列表中。

  • 返回新列表

語法

def get_indices(element, lst):
    return [i for i, x in enumerate(lst) if x == element]

這裡,[i for i, x in enumerate(lst) if x == element] 用於使用 enumerate() 遍歷列表 lst 以獲取索引和元素,並僅篩選元素與所需元素匹配的索引。

示例

在下面的示例中,我們定義了一個函式 get_indices(),它以元素和 lst 作為引數。它使用列表推導式遍歷列舉列表 lst,並檢查每個元素 x 是否等於給定的元素。它返回一個列表,其中包含滿足此條件的索引。在提供的示例中,該函式以 element = 3 和 my_list = [3, 5, 2, 3, 8, 3, 1] 作為引數被呼叫,從而產生輸出 [0, 3, 5],這些是列表中元素 3 的所有出現位置的索引。

def get_indices(element, lst):
    return [i for i, x in enumerate(lst) if x == element]

my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

輸出

[0, 3, 5]

方法 4:在 while 迴圈中使用 index() 方法

查詢元素所有出現位置的另一種方法是結合使用 index() 方法和 while 迴圈。此方法幫助我們逐步定位和記錄索引。

演算法

  • 初始化一個名為 indices 的空列表,用於儲存出現位置的索引。

  • 初始化一個名為 index 的變數,其值為 -1。

  • 進入一個 while 迴圈,該迴圈持續到引發 ValueError 為止。

  • 在迴圈內,嘗試使用 index() 方法查詢所需元素的下一個出現位置。

  • 如果找到匹配項,則將索引附加到 indices 列表中,並將 index 變數更新為從下一個位置繼續搜尋。

  • 如果未找到匹配項,則會引發 ValueError,迴圈結束。

  • 返回 indices 列表

語法

index = lst.index(element, index + 1)

這裡,index() 方法從索引 index + 1 開始搜尋給定元素的第一個出現位置。它將找到的索引賦值給變數 index。這允許我們透過遞增 index 並再次搜尋來定位元素的後續出現位置

示例

def get_indices(element, lst):
    indices = []
    index = -1
    while True:
        try:
            index = lst.index(element, index + 1)
            indices.append(index)
        except ValueError:
            break
    return indices

my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

輸出

[0, 3, 5]

結論

在本文中,我們討論瞭如何使用 Python 中的不同方法獲取列表中所有元素出現位置的索引。我們探討了四種不同的方法來實現此任務:使用 for 迴圈、列表推導式、enumerate() 函式以及帶有 while 迴圈的 index() 方法。每種方法都有其自身的優勢,選擇取決於個人喜好和手頭問題的具體要求。

更新於: 2023年7月18日

10K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告