📜  Python |返回排序列表的索引(1)

📅  最后修改于: 2023-12-03 15:04:10.503000             🧑  作者: Mango

Python | 返回排序列表的索引

在 Python 中,可以使用 sorted() 函数来对列表进行排序。但是有时候我们需要获取排序后的元素在原列表中的索引,这时候就需要使用 sorted() 函数的一个参数 key ,并结合 enumerate() 函数使用。

使用 sorted() 函数

下面是一个使用 sorted() 函数对列表进行排序的例子:

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

sorted_lst = sorted(lst)

print(sorted_lst)
# Output: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

可以看到,sorted() 函数会将列表中的元素按照从小到大的顺序进行排序。但是这并没有告诉我们排序后元素在原列表中的索引。

使用 key 参数

为了获取排序后的元素在原列表中的索引,我们可以使用 sorted() 函数的 key 参数。key 参数接受一个函数,用于指定按照什么规则进行排序。在这里,我们可以使用 lst.index() 函数获取元素在原列表中的索引,然后将其作为 key 参数的参数值。下面是一个获取排序后元素在原列表中的索引的例子:

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

sorted_index_lst = sorted(range(len(lst)), key=lambda i: lst[i])

print(sorted_index_lst)
# Output: [1, 3, 6, 0, 9, 2, 4, 8, 7, 10, 5]

可以看到,获取到的 sorted_index_lst 中的元素就是原列表中元素按照从小到大排序后的索引。需要注意的是,我们这里使用了 range() 函数和 lambda 表达式来构建了一个函数,用于返回原列表中每个元素的索引,这个函数会作为 key 参数来使用。因为 sorted() 函数会对 key 指定的函数进行排序,所以我们需要让这个函数返回的值是对应元素在原列表中的索引。返回的结果是一个列表,其中每个元素都是原列表中元素的索引。

结合 enumerate() 函数使用

使用 range() 函数和 lambda 表达式结合 sorted() 函数可以获取到排序后的元素在原列表中的索引,但是这种方式并不直观。在 Python 中有一个内置函数 enumerate() 函数,可以同时返回元素的索引和值。结合 enumerate() 函数,我们可以更方便地获取到排序后的元素在原列表中的索引。下面是一个使用 enumerate() 函数的例子:

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

sorted_index_lst = [i for i, _ in sorted(enumerate(lst), key=lambda x: x[1])]

print(sorted_index_lst)
# Output: [1, 3, 6, 0, 9, 2, 4, 8, 7, 10, 5]

可以看到,使用 enumerate() 函数可以更方便地获取到排序后元素的索引。我们首先使用 enumerate() 函数来将每个元素转换为包含索引和值的元组,然后使用 sorted() 函数按照元组第二个值即元素的大小进行排序。最后,我们使用列表推导式来将获取到的排序后的索引放到列表中。

以上就是使用 Python 来获取排序列表的索引的方法,希望对您有所帮助!