80953


Pythonで以下のように、num_listがあって、これをsortすると、普通にsortできます。

[code]

    num_list = [0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0]
    num_list = sorted(num_list)
    print(num_list)
    #result:[0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0]
    
[/code]

num_listを元に、以下のように2次関数の計算をした場合calc_num_listの中身の順番は、num_listとは異なった順番になります。  
この計算結果の順番をもとに、元のnum_listをsortをするにはどうするのが良いでしょうか？

[code]

    import math
    num_list = [0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0]
    calc_num_list = []
    for num in num_list:
        calc_num = -1 * num * num + num + 0.5
        calc_num_list .append(calc_num)
    print(calc_num_list )
    #result:[0.59, 0.66, 0.75, 0.5, -1.5, -5.5, -19.5]
    
[/code]


CC BY-SA 4.0
2021-08-21T11:11:19.997
80952
2021-08-21T12:51:24.287
34471
question
python
リストの中身を計算後の値を元にsortしたい


[sorted](https://wiki.python.org/moin/HowTo/Sorting/#Key_Functions)関数のキーに計算処理を入れることでソートできます。

[code]

    num_list = [0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0]
    sorted_by_calc = sorted(num_list, key=lambda num: (-1 * num * num + num + 0.5))
    print(sorted_by_calc)
    #[5.0, 3.0, 2.0, 1.0, 0.1, 0.2, 0.5]
    
[/code]


CC BY-SA 4.0
2021-08-21T11:38:16.613
80953
2021-08-21T11:38:16.613
9820
80952
answer


NumPy 使う方法もあります

[code]

    import numpy as np
    #result:[0.59, 0.66, 0.75, 0.5, -1.5, -5.5, -19.5]
    
    ind = np.argsort(calc_num_list)
    # print(np.take_along_axis(np.array(num_list), ind, axis=0))
    
    # 一次元なので, こちらでも OK
    print(np.array(num_list)[ind])
    # [5.  3.  2.  1.  0.1 0.2 0.5]
    
[/code]


CC BY-SA 4.0
2021-08-21T11:47:09.650
80955
2021-08-21T12:51:24.287
2021-08-21T12:51:24.287
43025
43025
80952
answer