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 に答える