73598


数値データが格納されているリスト`l = [4, 8, 1, 2, 9, 0]`に対して，元のインデックスと紐付けた状態で小さい順にソートしたいです．  
インデックスを取得するためにenumerateを用いて以下のようにしました．

[code]

    data=[]
    for idx, value in enumerate(l):
        data.append([idx, value])  # [[0, 4], [1, 8], [2, 1], [3, 2], [4, 9], [5, 0]]
    
[/code]

`data[i][0]`にインデックス値，`data[i][1]`に数値データが入っている状態です．この状態から，数値データを小さい順にソートしたいのですが，どうすればいいかわからず困っています．  
この例での期待する出力は，`[[5, 0], [2, 1], [3, 2], [0, 4], [1, 8], [4, 9]]`となります．  
どなたかわかる方がいらっしゃいましたらご回答よろしくお願いします


CC BY-SA 4.0
2021-01-27T05:38:39.427
73595
2021-01-27T06:52:24.393
36832
question
python python3
enumerateで取得した値でソートする方法


Sort関数のキー情報にソート対象のインデックス値を指定するラムダ式を記述します。  
[参考](https://note.nkmk.me/python-list-2d-sort/#2_1)

[code]

    data = [[0, 4], [1, 8], [2, 1], [3, 2], [4, 9], [5, 0]]
    sorted(data, key=lambda x: x[1])
    # [[5, 0], [2, 1], [3, 2], [0, 4], [1, 8], [4, 9]]
    
[/code]


CC BY-SA 4.0
2021-01-27T05:54:35.253
73596
2021-01-27T05:54:35.253
9820
73595
answer


中身が tuple でもよいのであれば以下の様に、

[code]

    l = [4, 8, 1, 2, 9, 0]
    list(sorted(enumerate(l), key=lambda x: x[1]))
    =>
    [(5, 0), (2, 1), (3, 2), (0, 4), (1, 8), (4, 9)]
    
[/code]

どうしても list で、という場合には

[code]

    list(map(list, sorted(enumerate(l), key=lambda x: x[1])))
    =>
    [[5, 0], [2, 1], [3, 2], [0, 4], [1, 8], [4, 9]]
    
[/code]

としてもよろしいかと思います。


CC BY-SA 4.0
2021-01-27T06:52:24.393
73598
2021-01-27T06:52:24.393
73595
answer