Python - 查詢k個最小元素的索引


索引是列表中元素的位置,而K定義了要從列表中查詢的最小元素的特定值。有時,我們在Web開發和資料庫領域工作,這些任務通常會發生以解決這個問題。在Python中,我們有內建函式,如sorted()、range()、len()等,這些函式將用於查詢k個最小元素的索引。

語法

以下語法在示例中使用:

sorted() 

sorted()是Python中的內建函式,它有助於返回新的排序列表,同時保持原始列表不變。

len()

len()是Python中的內建方法,它返回物件的長度。

range()

range()是Python中的內建方法,用於返回元素序列。range預設從0開始,在指定數字之前停止。

heapq.nsmallest()

nsmallest()是Python中的內建函式,它遵循heapify模組來返回列表中最小的數字。

argsort()

內建函式argsort()遵循模組名稱numpy,間接對陣列進行排序。

get()

get()是Python中的內建方法,它返回具有指定鍵的元素值。

extend()

extend()是Python內建函式。它迭代指定的可迭代物件並將它的元素附加到當前列表的末尾。

使用排序列表和列表推導式

在下面的示例中,我們將使用接受引數(輸入列表和k值)的遞迴函式。k值設定為3表示它對列表中的前三個元素進行排序。然後,使用一些內建函式,如sorted()、len()和lambda,計算k個最小元素的索引。接下來,使用K的切片表示法返回所需的結果。

示例

def k_smallest_indices(lst, k):
    sorted_indices = sorted(range(len(lst)), key=lambda i: lst[i])
    return sorted_indices[:k]
# Create the list
list_1 = [50, 20, 90, 10, 70]
# k variable sort the first three elements from the list
k = 3 
small_indices = k_smallest_indices(list_1, k)
print("The smallest elements are-",small_indices)

輸出

 The smallest elements are- [3, 1, 0]

使用heapq和堆資料結構

在下面的示例中,我們將從定義名為heapq的模組開始程式,該模組將用於查詢K個最小元素。然後,使用遞迴函式,它接收兩個引數值 - 輸入列表和k值,它們在內建函式nsmallest()和列表推導式上工作以儲存在相應的變數中。接下來,使用函式返回生成指定的結果。

示例

import heapq
def find_k_smallest_indices(lst, k):
    smallest_elements = heapq.nsmallest(k, lst)
    smallest_indices = [i for i, val in enumerate(lst) if val in smallest_elements]
    return smallest_indices
# create the list
my_list = [5, 4, 3, 2, 1]
k = 3
smallest_indices = find_k_smallest_indices(my_list, k)
print("The smallest index elements are-",smallest_indices)

輸出

The smallest elements are- [2, 3, 4]

使用numpy.argsort()

在下面的示例中,我們將使用numpy庫,它提供內建函式argsort()來對輸入列表元素進行排序。該程式使用遞迴函式,降低了程式的時間複雜度。它接受兩個引數 - 輸入列表和k值,以查詢K個最小元素。K設定為一個特定數字,表示列印結果的索引總數,根據給定值列印結果。繼續使用帶切片表示法的函式返回來獲得程式的輸出。

示例

import numpy as np
def find_k_smallest_indices(lst, k):
    indices = np.argsort(lst)
    return indices[:k]
# Create the list
my_list = [55, 7, 12, 2, 67, 90, 9]
# Initialize the k value
k = 3
smallest_indices = find_k_smallest_indices(my_list, k)
print("The smallest index elements are-", smallest_indices)

輸出

 The smallest index elements are- [3 1 6]

使用迴圈和字典

在下面的示例中,程式使用兩個for迴圈迭代輸入列表,使用一些內建函式,如enumerate()、get()和extend()來查詢K個最小元素的索引。

示例

def find_k_smallest_indices(lst, k):
    indices = {}
    for i, val in enumerate(lst):
        indices[val] = indices.get(val, []) + [i]
    sorted_indices = []
    for val in sorted(lst)[:k]:
        sorted_indices.extend(indices[val])
    return sorted_indices
# Create the list
my_list = [5, 2, 9, 1, 7]
k = 3
smallest_indices = find_k_smallest_indices(my_list, k)
print("The smallest index elements are-", smallest_indices)

輸出

 The smallest index elements are- [3, 1, 0]

結論

我們討論了使用各種方法求解K個最小元素索引的問題。heapq模組是一種新的方法,它定義了堆資料結構來解決這個問題。在一些示例中,將使用切片表示法根據條件和操作指定精確的索引位置。

更新於:2023年8月16日

323 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.