一次订购多个列表,其中一个作为基本参考

时间:2019-01-30 21:51:07

标签: python list sorting

我正在使用sklearn来计算一些特征值和特征向量,我的问题之一是我想对特征值进行排序,计算它们的累加和并将该数字与某个方差阈值进行比较。例如,一旦我知道前三个特征值就足够了,并且让我超过了该阈值,我将不得不找到对应的特征向量。

base_list = [2,3,1,4]
sorted_base_list = sorted(base_list, reverse=True)
>>> [4,3,2,1]
second_list = [[3,3][1,1][4,4][2,2]]

base_list应用于second_list的重新排序我想得到这个

second_list = [[2,2][1,1][3,3][4,4]]

换句话说,我想以与特征值相同的方式对列表的特征向量列表进行排序。

任何建议表示赞赏

3 个答案:

答案 0 :(得分:1)

import numpy as np
indices = np.argsort(base_list)[::-1]
s_list = [second_list[i] for i in indices]
print(s_list)
#[[2, 2], [1, 1], [3, 3], [4, 4]]
#Note: your second list is missing commas between lists.

如果您不想使用numpy

indices = sorted(range(len(base_list)), key=base_list.__getitem__, reverse=True)

答案 1 :(得分:1)

假设您的基本列表和第二个列表的长度始终相同,这就是我的操作方式(无需使用其他类似numpy的库)。

如果将第二个列表转换为元组列表,其中元组的第一个元素是基本列表中的对应元素,则可以按需要的方式对第二个列表进行排序。

for i in range(len(second_list)):
    second_list[i] = (base_list[i], second_list[i])

现在,您可以按照与基本列表相同的方式对第二个列表进行排序:

sorted_second_list = sorted(second_list, reverse=True)

然后可以从元组中提取值。

答案 2 :(得分:1)

您可以将未排序的特征值映射到基本列表的值。然后对您的基本列表进行排序,然后使用排序后的列表作为索引来创建排序后的特征值的列表:

base_list = [2, 3,1,4]
second_list =[[3,3],[1,1],[4,4],[2,2]]
eigen_map = {i: eigenvalue for i, eigenvalue in zip(base_list, second_list)}
sorted_list = sorted(base_list)
sorted_eigenvalues = [eigen_map[index] for index in sorted_list]

这给出:     [[4,4],[3,3],[1,1],[2,2]]