为了账号安全,请及时绑定邮箱和手机立即绑定

查找列表中第一个非零项的索引

查找列表中第一个非零项的索引

饮歌长啸 2023-10-31 21:16:12
我有以下清单:list_test = [0,0,0,1,0,2,5,4,0,0,5,5,3,0,0]我想找到列表中所有不等于零的第一个数字的索引。在这种情况下,输出应该是:output = [3,5,10]有Pythonic的方法来做到这一点吗?
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

根据输出,我认为你想要连续非零序列的第一个索引。


至于Pythonic,我把它理解为列表生成器,但可读性很差。


# works with starting with non-zero element.

# list_test = [1, 0, 0, 1, 0, 2, 5, 4, 0, 0, 5, 5, 3, 0, 0]

list_test = [0, 0, 0, 1, 0, 2, 5, 4, 0, 0, 5, 5, 3, 0, 0]

output = [i for i in range(len(list_test)) if list_test[i] != 0 and (i == 0 or list_test[i - 1] == 0)]

print(output)


查看完整回答
反对 回复 2023-10-31
?
守着一只汪

TA贡献1872条经验 获得超3个赞

还有一个numpy基于的解决方案:


import numpy as np

l = np.array([0,0,0,1,0,2,5,4,0,0,5,5,3,0,0])

non_zeros = np.where(l != 0)[0]

diff = np.diff(non_zeros)

np.append(non_zeros [0], non_zeros [1 + np.where(diff>=2)[0]])  # array([ 3,  5, 10], dtype=int64)

解释:

首先,我们找到非零位置,然后计算这些位置的对差(我们需要加 1,因为它是out[i] = a[i+1] - a[i],请阅读更多关于np.diff),然后我们需要添加第一个非零元素以及其中的所有值差异大于 1)


笔记:

它也适用于数组以非零元素或全部非零元素开头的情况。


查看完整回答
反对 回复 2023-10-31
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

list_test = [0,0,0,1,0,2,5,4,0,0,5,5,3,0,0]

res = {}

for index, item in enumerate(list_test):

    if item > 0:

        res.setdefault(index, None)

print(res.keys())


查看完整回答
反对 回复 2023-10-31
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信