[英]Sort list based on another list
我在python3.6中有两个列表,我想通过考虑d
值对w
进行排序。 这类似于这个问题, 基于另一个列表中的值对列表进行排序? ,但是,我无法使用zip
因为w
和d
不是成对数据。
我有一个代码示例,并且想要获取t
变量。
我可以通过使用for循环来做到这一点。 有没有更快的方法?
import numpy as np
w = np.arange(0.0, 1.0, 0.1)
t = np.zeros(10)
d = np.array([3.1, 0.2, 5.3, 2.2, 4.9, 6.1, 7.7, 8.1, 1.3, 9.4])
ind = np.argsort(d)
print('w', w)
print('d', d)
for i in range(10):
t[ind[i]] = w[i]
print('t', t)
#w [ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
#d [ 3.1 0.2 5.3 2.2 4.9 6.1 7.7 8.1 1.3 9.4]
#ht [ 0.3 0. 0.5 0.2 0.4 0.6 0.7 0.8 0.1 0.9]
像这样使用argsort
:
>>> t = np.empty_like(w)
>>> t[d.argsort()] = w
>>> t
array([0.3, 0. , 0.5, 0.2, 0.4, 0.6, 0.7, 0.8, 0.1, 0.9])
它们是成对的数据,但方向相反。
i
,np.arange(0,10)。 d
zip
。 d
作为排序键对元组进行排序; i
仍然拥有每个d
元素的原始索引。 w
zip
它。 i
作为排序键对三元组(好吧,一对成对作为一个元素)进行排序。 w
值; 这是你的t
数组。 这个问题的答案很棒,但是我要谨慎地指出您没有按照自己的想法去做。
您想做什么:( 或至少是我收集的)您想让t
包含以d
的排序顺序重新排列的w
的值
你在做什么:填写t
中的排序顺序d
,用的元素w
。 您仅在更改t
填充方式的顺序。 您没有将d
反映为w
on t
考虑一下for
循环中的一个小变化
for i in range(0,10):
t[i] = w[ind[i]]
这输出一个t
('t', array([0.1, 0.8, 0.3, 0. , 0.4, 0.2, 0.5, 0.6, 0.7, 0.9]))
您也可以调整PaulPanzer的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.