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模块是一种新的方法,它定义了堆数据结构来解决这个问题。在一些示例中,将使用切片表示法根据条件和操作指定精确的索引位置。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP