Eliminar ceros iniciales y finales de la lista multidimensional en Python

Tengo una lista como:

my_list = [[1,2,2,1], [0,0,1,2], [1,2,0,0], [1,0,0,1]] 

Necesito eliminar solo los ceros iniciales y finales de las listas internas, para terminar con:

 new_list = [[1,2,2,1], [1,2], [1,2], [1,0,0,1]] 

Cualquier ayuda muy apreciada.

 for sub_list in my_list: for dx in (0, -1): while sub_list and sub_list[dx] == 0: sub_list.pop(dx) 
 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])] 

Si quieres adormecer.

También puede simplemente hacer:

 >>> 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]] 

Algunos tiempos:

 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 

Así que realmente es mejor no convertir en np.array a menos que vaya a usar ese tipo más adelante.

 new_list = [map(int,"".join(map(str,x)).strip("0")) for x in my_list] 

Podría funcionar

 >>> new_list = [map(int,"".join(map(str,x)).strip("0")) for x in my_list] >>> new_list [[1, 2, 2, 1], [1, 2], [1, 2], [1, 0, 0, 1]] 

Usando una única lista de comprensión, con corte por comprensión de generador filtrado:

 new_list = [l[next((i for i, n in enumerate(l) if n != 0), 0): next((len(l) - i for i, n in enumerate(reversed(l)) if n != 0), 0)] for l in my_list] 

utilizando regex y itertools.chain() :

 In [91]: my_lis=[[1,2,2,1], [0,0,1,2], [1,2,0,0], [1,0,0,10]] In [92]: my_lis1=[[y.split() for y in filter(None,re.split(r"\b\s?0\s?\b", " ".join(map(str,x))))] for x in my_lis] In [93]: [map(int,chain(*x)) for x in my_lis1] Out[93]: [[1, 2, 2, 1], [1, 2], [1, 2], [1, 10]]