55465


python上で

[code]

    lst=[[1,2,3],[1,2,3],[1,2,3,],[1,2,3]]
    
[/code]

が用意されていて  
それを

[code]

    lst=[[2,3,1],[2,3,1],[2,3,1],[2,3,1]]
    
[/code]

にソートしたいです。  
リストうちの要素の中身だけをユーザの指定順序でソートするには  
どのようにしたらよいでしょうか


CC BY-SA 4.0
2019-06-03T01:57:06.833
55464
2019-06-03T23:44:29.477
2019-06-03T04:08:34.373
34224
34224
question
python python3
list内のlistだけを指定順序で整列


子リスト要素数が固定であり、外部から要素ソート順`order`を与えるパターンです：

[code]

    data = [[1,2,3], [1,2,3], [1,2,3], [1,2,3]]
    order = [2,0,1]
    
    result = []
    for sublist in data:
        result.append( [pack[1] for pack in sorted(zip(order, sublist))] )
    
[/code]

上記をまとめて、リスト内包表記のネストでも記述は可能です（可読性は微妙ですが...）

[code]

    result = [[pack[1] for pack in sorted(zip(order, sublist))] for sublist in data]
    
[/code]


CC BY-SA 4.0
2019-06-03T02:44:44.947
55465
2019-06-03T02:44:44.947
49
55464
answer


たかだか3つなら

[code]

    lst = [[1,2,3],[1,2,3],[1,2,3,],[1,2,3]]
    lst = [[j, k, i] for i, j, k in lst]
    
[/code]

とするでしょう。

そうでないなら  
<https://docs.python.org/ja/3/library/operator.html#operator.itemgetter>  
を使って、

[code]

    from operator import itemgetter
    
    lst = [[1,2,3],[1,2,3],[1,2,3,],[1,2,3]]
    
    getter = itemgetter(1, 2, 0)
    lst = [list(getter(x)) for x in lst]
    
[/code]

とでもします。


CC BY-SA 4.0
2019-06-03T03:48:22.223
55470
2019-06-03T23:44:29.477
2019-06-03T23:44:29.477
12274
12274
55464
answer