1

我想根据列表中的数字与给定数字的接近程度对列表进行排序。例如:

target_list = [1,2,8,20]
number = 4

那么可能排序列表是[2,1,8,20]因为:

   4-2 = 2
   4-1 = 3
 |4-8| = 4
|4-20| = 16

万一发生碰撞,我真的不在乎哪个先出现,但是我试图根据这个距离度量对列表进行排序。最好的(和pythonic)方法是什么?

4

3 回答 3

12

可以使用函数的key参数sorted

>>> target_list = [1,2,8,20]
>>> sorted(target_list, key=lambda x: abs(4-x))
[2, 1, 8, 20]

或者,如果您想对其进行排序,即使 listsort方法也接受key.

>>> target_list.sort(key=lambda x: abs(4-x))
>>> target_list
[2, 1, 8, 20]
于 2012-04-23T19:06:37.843 回答
4
sorted(target_list, key=lambda k: abs(k - 4))

或者对列表进行适当的排序:

target_list.sort(key=lambda k: abs(k - 4))
于 2012-04-23T19:07:07.890 回答
1
>>> target_list.sort(key=lambda x: abs(number-x))
>>> target_list
[2, 1, 8, 20]
于 2012-04-23T19:09:19.620 回答