Python 找到k个最小元素的索引

Python 找到k个最小元素的索引

索引是列表中元素的位置,而K定义了从列表中选取最小元素的特定值。有时,我们在Web开发和数据库领域工作时会遇到这些任务,通常需要解决这个问题。在Python中,我们有内置的函数如sorted(),range(),len()等,这些函数将用于查找k个最小元素的索引。

语法

以下是示例中使用的语法-

sorted()

sorted()是Python中的一个内置函数,它可以帮助返回一个新的已排序列表,同时保持原始列表不变。

len()

len()是Python中的一个内置方法,用于返回对象的长度。

range()

range() 是Python中的一个内置方法,用于返回一个序列的元素。范围默认从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模块是定义堆数据结构来解决该问题的新方法。在一些示例中,将使用切片符号来根据条件和操作来指定精确的索引定位。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程