5

次のようなリストがあります。

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

内部リストから先頭と末尾のゼロのみを削除する必要があるため、次のようになります。

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

どんな助けでも大歓迎です。

4

5 に答える 5

11
for sub_list in my_list:
    for dx in (0, -1):
        while sub_list and sub_list[dx] == 0:
            sub_list.pop(dx)
于 2012-11-29T20:17:00.043 に答える
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])]

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

いくつかのタイミング:

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

そのため、後でそのタイプを使用する場合を除き、np.array で変換しないことをお勧めします。

于 2012-11-29T20:17:19.530 に答える
4
new_list = [map(int,"".join(map(str,x)).strip("0")) for x in my_list]

うまくいくかもしれません

>>> 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]]
于 2012-11-29T20:15:14.150 に答える
2

Using a single list comprehension, with slicing by filtered generator comprehension:

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]
于 2012-11-29T22:08:22.627 に答える
0

regexとを使用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]]
于 2012-11-29T20:28:29.163 に答える