根据元素与给定值的距离排列列表
Arranging a list based on the distance of its elements from a given value
假设我们有如下列表
[2.3, 1.02, 1.99, 0.99, 0.089, 0, 1.1, -1.1, -2.1]
我们希望根据元素与目标值等于 1 的距离按以下方式排列此列表的元素:
[0.99, 1.02, 1.1, 0.089, 1.99, 0, 2.3, -1.1, -2.1]
如何在 python 中用一两行做到这一点?
python解决方案
使用sorted
以目标的绝对距离为键:
L = [2.3, 1.02, 1.99, 0.99, 0.089, 0, 1.1, -1.1, -2.1]
target = 1
out = sorted(L, key=lambda x: abs(x-target))
输出:[0.99, 1.02, 1.1, 0.089, 1.99, 0.0, 2.3, -1.1, -2.1]
numpy 解决方案
计算绝对距离并使用numpy.argsort
:
L = [2.3, 1.02, 1.99, 0.99, 0.089, 0, 1.1, -1.1, -2.1]
target = 1
import numpy as np
a = np.array(L)
out = a[np.argsort(abs(a-target))].tolist()
输出:[0.99, 1.02, 1.1, 0.089, 1.99, 0.0, 2.3, -1.1, -2.1]
假设我们有如下列表 [2.3, 1.02, 1.99, 0.99, 0.089, 0, 1.1, -1.1, -2.1]
我们希望根据元素与目标值等于 1 的距离按以下方式排列此列表的元素: [0.99, 1.02, 1.1, 0.089, 1.99, 0, 2.3, -1.1, -2.1]
如何在 python 中用一两行做到这一点?
python解决方案
使用sorted
以目标的绝对距离为键:
L = [2.3, 1.02, 1.99, 0.99, 0.089, 0, 1.1, -1.1, -2.1]
target = 1
out = sorted(L, key=lambda x: abs(x-target))
输出:[0.99, 1.02, 1.1, 0.089, 1.99, 0.0, 2.3, -1.1, -2.1]
numpy 解决方案
计算绝对距离并使用numpy.argsort
:
L = [2.3, 1.02, 1.99, 0.99, 0.089, 0, 1.1, -1.1, -2.1]
target = 1
import numpy as np
a = np.array(L)
out = a[np.argsort(abs(a-target))].tolist()
输出:[0.99, 1.02, 1.1, 0.089, 1.99, 0.0, 2.3, -1.1, -2.1]