Python - 为每个元素查找左侧第一个非零元素的索引

标签 python algorithm

我知道有很多类似的问题,但这个问题略有不同。

给定任何行,例如 row = [1 0 0 1 0 1 0 1] 我想输出一行内容为 output = [0 -1 -1 0 -1 3 -1 5]

基本上这就是说,第一个 1,指向它自己。第二个 1 的索引为 3,指向其左侧的 1,因为 1 的索引为 0,所以它为 0。第 3 个 1 指向它左边的 1,索引为 3。最后,第 4 个 1 指向它的第一个 1左边有索引 5。最后,所有 0 都设置为 -1。

我能够获取所有 1 都使用 numpy.nonzero(row) 的位置的索引,但我不确定如何分隔这些索引与输入数组的维度相同。

最佳答案

如果您在列表上进行迭代(也使用 enumerate 来跟踪元素索引)并将最后一个索引存储在看到 1(低于任何非零值)的位置(除了第一次)

row = [1, 0, 0, 1, 0, 1, 0, 1]

prev_index = None

result = []
for i,v in enumerate(row):
    if v:
        result.append(i if prev_index is None else prev_index)
        prev_index = i
    else:
        result.append(-1)

>>> result
[0, -1, -1, 0, -1, 3, -1, 5]

这很难通过列表理解来实现,因为需要存储以前的索引。

关于Python - 为每个元素查找左侧第一个非零元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54355028/

相关文章:

python - 如果超过变化的行索引,则将 numpy 矩阵元素设置为零

python - 子目录结构破坏了 C++ 扩展构建

python - 在 scikit-learn 中,load_files 函数正在读取不需要的文本文件

javascript - 如何计算平均时间

c++ - 如何在范围内声明?

python - 从文本文件中解析唯一的单词

python - 如何使用 python 和 BeautifulSoup 从网站下载 .qrs 文件?

c# - 道格拉斯-普克算法 : understanding use with polgyons

c - 大约运行时间

arrays - 两个未排序的小数组的交集算法