5 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以用來enumerate迭代索引和值。然后next在找到第一個(gè)非零值時(shí)使用停止。如果StopIteration拋出異常,則列表不包含非零值,因此請(qǐng)執(zhí)行您想要的任何錯(cuò)誤處理。
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貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
這個(gè)簡(jiǎn)單的行:
list(map(bool, list1)).index(True)
4
所有非零值的計(jì)算結(jié)果均為True
,因此將所有元素轉(zhuǎn)換為布爾值時(shí),您只需找到第一個(gè)True
。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
最簡(jiǎn)單的方法是:
list1.index([value for value in list1 if value!=0][0])
當(dāng)然,這只適用于列表中有非零元素的情況。如果你想處理所有情況,你可能需要使用以下函數(shù):
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貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
for i in range(len(list1)):
if list1[i] != 0:
print(i)
break
或具體 4
list1.index(4)

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
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)))
添加回答
舉報(bào)