使用迭代器对数组进行切片



我正在查看这个python代码,我需要一些解释:

arr = [0, 0, 0, 0, 1, 2, 3, 4,5]
arr = arr[next((i for i, x in enumerate(arr) if x != 0), len(arr)):]

这段代码将从数组中删除前导零,我正在尝试了解它是如何工作的。我知道我们创建了一个迭代器,它将迭代除 0 值之外arr的所有元素,接下来将仅迭代到数组长度(不包括(。

但是这些索引是如何返回的 next 组合成一个数组的呢?

让我们一步一步地看一下代码。你想切掉最初的零。如果您知道第一个非零元素的索引,n,表达式将如下所示

arr = arr[n:]

这基本上就是我们在这里所拥有的,n = next((i for i, x in enumerate(arr) if x != 0), len(arr)).

通常,双参数形式的next将返回第二个参数作为标记,而不是在迭代器用完时引发StopIteration。这就是len(arr)的目的。如果所有元素都为零,则表达式变为

arr = arr[len(arr):]  # obviously empty

如果存在非零元素,则next调用将找到其索引(使用enumerate启用(,并返回它。

相关内容

  • 没有找到相关文章

最新更新