从第一个非零元素开始切片数组

2024-04-20 13:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带前导零的数组,我想要第一个非零元素的数组。 例如,我有一个数组

x=[0,0,0,0,0,3,2,0,0,4,5]

我想获得:

 x=[3,2,0,0,4,5]

Tags: 元素数组前导
2条回答

使用non-zeros上的^{}获取起始非零索引,然后简单地将其切片-

x[(x!=0).argmax():]

样本运行-

In [71]: x
Out[71]: array([0, 0, 0, 0, 0, 3, 2, 0, 0, 4, 5])

In [72]: x[(x!=0).argmax():]
Out[72]: array([3, 2, 0, 0, 4, 5])

你所拥有的是一个列表,而不是一个数组。这是一个纯Python的解决方案,不过您可以考虑将列表转换为NumPy数组,并使用Divakar的解决方案以获得更好的性能(如果并且仅当您计划使用NumPy进行下游处理时)

In [1]: from itertools import dropwhile

In [2]: from operator import not_

In [3]: x = [0,0,0,0,0,3,2,0,0,4,5]

In [4]: list(dropwhile(not_, x))
Out[4]: [3, 2, 0, 0, 4, 5]

相关问题 更多 >