📅  最后修改于: 2023-12-03 15:04:10.503000             🧑  作者: Mango
在 Python 中,可以使用 sorted()
函数来对列表进行排序。但是有时候我们需要获取排序后的元素在原列表中的索引,这时候就需要使用 sorted()
函数的一个参数 key
,并结合 enumerate()
函数使用。
下面是一个使用 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()
函数会将列表中的元素按照从小到大的顺序进行排序。但是这并没有告诉我们排序后元素在原列表中的索引。
为了获取排序后的元素在原列表中的索引,我们可以使用 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
指定的函数进行排序,所以我们需要让这个函数返回的值是对应元素在原列表中的索引。返回的结果是一个列表,其中每个元素都是原列表中元素的索引。
使用 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 来获取排序列表的索引的方法,希望对您有所帮助!