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] # 创建列表 list_1 = [50, 20, 90, 10, 70] # k 变量对列表中的前三个元素进行排序 k = 3 small_indices = k_smallest_indices(list_1, k) print("最小元素是-",small_indices)
输出
最小元素是- [3, 1, 0]
使用 heapq 和堆数据结构
在下面的示例中,我们将通过定义名为 heapq 的模块来启动程序,该模块将用于查找 K 个最小元素。然后使用递归函数接收两个参数值 - 输入列表和 k 值,它们在内置函数 nsmallest() 和列表推导上工作以存储在相应的变量中。接下来,使用函数 return 生成指定的结果。
示例
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 # 创建列表 my_list = [5, 4, 3, 2, 1] k = 3 smallest_indices = find_k_smallest_indices(my_list, k) print("最小索引元素是-",smallest_indices)
输出
最小元素是- [2, 3, 4]
使用 numpy.argsort()
在下面的例子中,我们将使用提供内置函数 argsort() 的 numpy 库对输入列表元素进行排序。该程序使用递归函数来降低程序的时间复杂度。它接受两个参数 - 输入列表和 k 值来查找 K 个最小元素。K 设置为一个特定数字,表示根据给定值打印结果的索引总数。继续使用带有切片符号的函数返回来获取程序的输出。
示例
import numpy as np def find_k_smallest_indices(lst, k): indices = np.argsort(lst) return indices[:k] # 创建列表 my_list = [55, 7, 12, 2, 67, 90, 9] # 初始化 k 值 k = 3 smallest_indices = find_k_smallest_indices(my_list, k) print("最小索引元素是-", minimal_indices)
输出
最小索引元素是- [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 # 创建列表 my_list = [5, 2, 9, 1, 7] k = 3 smallest_indices = find_k_smallest_indices(my_list, k) print("最小索引元素是-", minimal_indices)
输出
最小索引元素是- [3, 1, 0]
结论
我们讨论了使用各种方法求解 K 个最小元素的索引。heapq 模块是一种定义堆数据结构来解决此问题的新方法。在一些示例中,将使用切片符号根据条件和操作指定精确的索引定位。