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
TA贡献1821条经验 获得超4个赞
这个简单的行:
list(map(bool, list1)).index(True)
4
所有非零值的计算结果均为True
,因此将所有元素转换为布尔值时,您只需找到第一个True
。
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
TA贡献1951条经验 获得超3个赞
for i in range(len(list1)):
if list1[i] != 0:
print(i)
break
或具体 4
list1.index(4)
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)))
添加回答
举报