从Python中的多维列表中删除前导零和尾随零

Dar*_*ech 5 python numpy

我有一个列表,如:

my_list = [[1,2,2,1], [0,0,1,2], [1,2,0,0], [1,0,0,1]]
Run Code Online (Sandbox Code Playgroud)

我需要从内部列表中仅删除前导和尾随零,以便我最终得到:

new_list = [[1,2,2,1], [1,2], [1,2], [1,0,0,1]]
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

Ste*_*ski 11

for sub_list in my_list:
    for dx in (0, -1):
        while sub_list and sub_list[dx] == 0:
            sub_list.pop(dx)
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 8

my_list = [[1,2,2,1], [0,0,1,2], [1,2,0,0], [1,0,0,1]]
my_list =[np.trim_zeros(np.array(a)) for a in my_list]
>>> my_list
[array([1, 2, 2, 1]), array([1, 2]), array([1, 2]), array([1, 0, 0, 1])]
Run Code Online (Sandbox Code Playgroud)

如果你想要numpy.

也可以这样做:

>>> my_list =[np.trim_zeros(a) for a in my_list]
>>> my_list
[[1, 2, 2, 1], [1, 2], [1, 2], [1, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)

一些时间:

Numpy
>>> timeit.timeit('my_list =[np.trim_zeros(a) for a in my_list]',setup='import numpy as np; my_list = [[1,2,2,1], [0,0,1,2], [1,2,0,0], [1,0,0,1]]', number=10000)
0.08429217338562012

Numpy w/convert array
>>> timeit.timeit('my_list =[np.trim_zeros(np.array(a)) for a in my_list]',setup='import numpy as np; my_list = [[1,2,2,1], [0,0,1,2], [1,2,0,0], [1,0,0,1]]', number=10000)
0.6929900646209717
Run Code Online (Sandbox Code Playgroud)

所以最好不要在np.array转换,除非你以后要使用那种类型.