Python|列表元素的排序列表的索引
排序是一种常见的结构,并且已经讨论了它的许多变体。但有时,我们需要对 list 的列表进行排序,而且只需要在排序之前找到元素出现的顺序。让我们找出如何在列表列表中获取排序顺序的索引。
方法 #1:使用列表理解 + enumerate() + sort()
上述 3 个功能的组合可用于执行此特定任务。在此,我们执行由元素以及行和列坐标组成的三元组的排序,并在第二步中返回它们。
# Python3 code to demonstrate
# Indices of sorted list of list elements
# using List comprehension + enumerate() + sort()
# initializing list
test_list = [[4, 5, 1],
[9, 3, 2],
[8, 6]]
# printing original list
print("The original list : " + str(test_list))
# using List comprehension + enumerate() + sort()
# Indices of sorted list of list elements
res = [(i, j) for i, x in enumerate(test_list)
for j, k in enumerate(x)]
res.sort(key = lambda ij: test_list[ij[0]][ij[1]])
# print result
print("The indices of sorted order are : " + str(res))
输出 :
The original list : [[4, 5, 1], [9, 3, 2], [8, 6]]
The indices of sorted order are : [(0, 2), (1, 2), (1, 1), (0, 0), (0, 1), (2, 1), (2, 0), (1, 0)]
方法 #2:使用sorted()
+ lambda
上面执行的任务可以作为 sorted函数的参数执行,而 lambda函数执行上述列表理解函数的任务。
# Python3 code to demonstrate
# Indices of sorted list of list elements
# using sorted() + lambda
# initializing list
test_list = [[4, 5, 1],
[9, 3, 2],
[8, 6]]
# printing original list
print("The original list : " + str(test_list))
# using sorted() + lambda
# Indices of sorted list of list elements
res = sorted([(i, j) for i, x in enumerate(test_list)
for j, k in enumerate(x)],
key = lambda ij: test_list[ij[0]][ij[1]])
# print result
print("The indices of sorted order are : " + str(res))
输出 :
The original list : [[4, 5, 1], [9, 3, 2], [8, 6]]
The indices of sorted order are : [(0, 2), (1, 2), (1, 1), (0, 0), (0, 1), (2, 1), (2, 0), (1, 0)]