73642

[code]

    num_list = [[[10,20,30],[123,34,20]],[[30,40,50],[123,132,4]]]
    
[/code]

上のような配列を下のように最初の一つだけ削除して取り出したいのですが、効率のいい方法はないでしょうか？

[code]

    num_list = [[[20,30],[34,20]],[[40,50],[132,4]]]
    
[/code]


CC BY-SA 4.0
2021-01-28T07:51:12.810
73638
2021-01-28T08:48:03.703
2021-01-28T08:06:02.100
3060
40856
question
python
Pythonのlistの最初の項目を削除して取り出したい


効率的かどうかは不明ですが、以下は numpy.ndarray のセレクタを使う方法です。

[code]

    import numpy as np
    
    num_list = [[[10, 20, 30], [123, 34, 20]], [[30, 40, 50], [123, 132, 4]]]
    print(np.array(num_list)[:,:,1:].tolist())
    
    =>
    [[[20, 30], [34, 20]], [[40, 50], [132, 4]]]
    
[/code]


CC BY-SA 4.0
2021-01-28T08:11:20.300
73639
2021-01-28T08:11:20.300
73638
answer


通常のループだと以下のような処理になるはず

[code]

    num_list = [[[10,20,30],[123,34,20]],[[30,40,50],[123,132,4]]]
    
    for lists in num_list:
      print(lists)
      for lst in lists:
        print(f'\t{lst} => {lst[1:]}')
    
[/code]

[code]

    [[10, 20, 30], [123, 34, 20]]
        [10, 20, 30] => [20, 30]
        [123, 34, 20] => [34, 20]
    [[30, 40, 50], [123, 132, 4]]
        [30, 40, 50] => [40, 50]
        [123, 132, 4] => [132, 4]
    
[/code]

それをリスト内包表記にするとこんな感じ

[code]

    [[lst[1:]for lst in lists]for lists in num_list]
    
[/code]

* * *

効率というのが速度を指しているなら, `timeit` で調べることができます


CC BY-SA 4.0
2021-01-28T08:48:03.703
73642
2021-01-28T08:48:03.703
43025
73638
answer