提问人:bearyTheBear 提问时间:11/18/2022 更新时间:11/18/2022 访问量:47
按每个列表对列表列表进行排序,并返回最终索引
Sorting a list of lists by every list and return the final index
问:
我想对一个包含任意数量的列表的列表进行排序,以按每个列表进行排序。 此外,我不想使用任何库(既不是 python-native 也不是第三方)。
data = [['a', 'b', 'a', 'b', 'a'], [9, 8, 7, 6, 5]]
我知道我可以通过这样做来实现这一目标
list(zip(*sorted(zip(*data))))
# [('a', 'a', 'a', 'b', 'b'), (5, 7, 9, 6, 8)]
但我希望有这个过程的排序索引。 在这种情况下:
index = [4, 2, 0, 3, 1]
我找到了几个固定数量的内部列表的答案,或者只想按特定列表排序的答案。这两种情况都不是我想要的。
答:
1赞
Temba
11/18/2022
#1
试试这个
data = [["a", "b", "a", "b", "a"], [9, 8, 7, 6, 5]]
def sortList(inputList):
masterList = [[value, index] for index, value in enumerate(inputList)]
masterList.sort()
values = []
indices = []
for item in masterList:
values.append(item[0]) # get the item
indices.append(item[1]) # get the index
return values, indices
sortedData = []
sortedIndices = []
for subList in data:
sortedList, indices = sortList(subList)
sortedData.append(sortedList)
sortedIndices.append(indices)
print(sortedData)
print(sortedIndices)
3赞
Woodford
11/18/2022
#2
在排序之前,将临时索引列表添加到末尾。结果将显示附加列表中的预排序索引:
data = [['a', 'b', 'a', 'b', 'a'], [9, 8, 7, 6, 5]]
assert all(len(sublist) == len(data[0]) for sublist in data)
data.append(range(len(data[0])))
*sorted_data, indices = list(zip(*sorted(zip(*data))))
print(sorted_data)
# [('a', 'a', 'a', 'b', 'b'), (5, 7, 9, 6, 8)]
print(indices)
# (4, 2, 0, 3, 1)
评论
range
和?len