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條經驗 獲得超5個贊
這個簡單的行:
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)))
添加回答
舉報