[英]Sort a list according to the index of the elements in another list
我有以下列表:
A = [0.9,0.8,...,0.1,0.0]
和另一个清单:
B = [8, 16, 53, 3, 6, 32, 1, 7, 0, 35]
如何制作一个类似于另一个列表的排序列表,以便第二个列表中的最大值与第一个列表具有相同的index
?
我想像这样对列表 A 进行排序:
A_sorted = [0.5, 0.6, 0.9, 0.2, 0.3, 0.7, 0.1, 0.4, 0.0, 0.8]
{B = [8 , 16 , 53 , 3 , 6 , 32 , 1 , 7 , 0 , 35 ]}
这怎么可能在 Python 中,最好是一行?
谢谢大家!
您可以执行以下操作:
B
的排序值转换为A
的排序值B
中的每个值构建一个新版本的A_sorted
by,在B
中查找相应的值。values = [5, 8, 1, 3]
keys = [0.1, 0.4, 0.3, 0.2]
sorted_values = sorted(values)
sorted_keys = sorted(keys)
merged = dict(zip(sorted_keys, sorted_values))
result = [merged[key] for key in keys]
这给出了:
>>> keys
[0.1, 0.4, 0.3, 0.2]
>>> result
[1, 8, 5, 3]
如果必须,您可以将这些语句组合成两行,例如:
merged = dict(zip(sorted(keys), sorted(values)))
result = [merged[key] for key in keys]
(甚至在一个中,通过内联合merged
)。 但是你失去了可读性。
自己解决这个问题的关键是意识到您需要创建一种方法来查找任何b
排序列表中a
的相应值。 一旦你意识到这一点,你就会意识到你需要一个从排序 b 到排序 a 的字典。
试试下面的代码:
a = [2,3,5,6,7]
b = [7,2,3,4,5]
sorted_b = sorted(b)
sorted_a = sorted(a)
for id,i in enumerate(sorted_b):
idx = b.index(i)
a[idx] = sorted_a[id]
print(a)
我找到的答案是将 B 的索引再排序一次以获得逆排序索引(原始向量中的每个变量在哪里),而不是将其用作新向量的索引,如下所示:
A[np.argsort(np.argsort(B))]
我使用了@batwannabe 的建议
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.