按每个列表对列表列表进行排序,并返回最终索引

Sorting a list of lists by every list and return the final index

提问人:bearyTheBear 提问时间:11/18/2022 更新时间:11/18/2022 访问量:47

问:

我想对一个包含任意数量的列表的列表进行排序,以按每个列表进行排序。 此外,我不想使用任何库(既不是 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]

我找到了几个固定数量的内部列表的答案,或者只想按特定列表排序的答案。这两种情况都不是我想要的。

Python 对嵌套列表 进行排序

评论

1赞 cards 11/18/2022
range和?len

答:

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)