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

如何在python列表中找到除0之外的任何数字的第一个索引?

如何在python列表中找到除0之外的任何数字的第一个索引?

神不在的星期二 2023-12-20 10:24:57
我有一个包含 0 和其他一些数字的列表,如何找到非 0 数字的第一个索引?例如,在此列表中list1 = [0,0,0,0,4,3,2,0,3]我如何找到 4 的索引?
查看完整描述

5 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您可以用来enumerate迭代索引和值。然后next在找到第一个非零值时使用停止。如果StopIteration抛出异常,则列表不包含非零值,因此请执行您想要的任何错误处理。


def first_non_zero(values):

    try:

        return next(idx for idx, value in enumerate(values) if value != 0)

    except StopIteration:

        return None

例子


>>> list1 = [0,0,0,0,4,3,2,0,3]

>>> first_non_zero(list1)

4

>>> first_non_zero([0,0,0])

>>>      # None


查看完整回答
反对 回复 2023-12-20
?
收到一只叮咚

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

这个简单的行:

list(map(bool, list1)).index(True)
4

所有非零值的计算结果均为True,因此将所有元素转换为布尔值时,您只需找到第一个True


查看完整回答
反对 回复 2023-12-20
?
翻过高山走不出你

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

最简单的方法是:


list1.index([value for value in list1 if value!=0][0])

当然,这只适用于列表中有非零元素的情况。如果你想处理所有情况,你可能需要使用以下函数:


def first_non_zero_index(list1):

    for idx, value in enumerate(list1):

        if value!=0:

            return idx

    return None

并将列表直接扔给它:first_non_zero_index(list1)它返回4


查看完整回答
反对 回复 2023-12-20
?
饮歌长啸

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

for i in range(len(list1)):

    if list1[i] != 0:

        print(i)

        break

或具体 4


list1.index(4)


查看完整回答
反对 回复 2023-12-20
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

list1 = [0,0,0,0,4,3,2,0,3]

for i in set(list1):

    if i:

        print("Index of {} is {}".format(i,list1.index(i)))


查看完整回答
反对 回复 2023-12-20
  • 5 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

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