Python 代碼閱讀合集介紹:為什么不推薦Python初學者直接看專案原始碼
本篇閱讀的代碼實作了在串列中尋找符合條件的元素的位置,
本篇閱讀的代碼片段來自于30-seconds-of-python,
find_index
def find_index(lst, fn):
return next(i for i, x in enumerate(lst) if fn(x))
# EXAMPLES
find_index([1, 2, 3, 4], lambda n: n % 2 == 1) # 0
find_index函式接收一個串列和一個判別函式,回傳第一個使判別函式為真的元素的下標,
函式使用串列推導式、enumerate()和next()來回傳lst中第一個 是判別函式fn的回傳為True的元素的索引,
next(iterator[, default])獲取迭代器的下一個元素,如果迭代器耗盡,則回傳給定的 default,如果沒有默認值則觸發 StopIteration
enumerate(iterable, start=0)
回傳一個列舉物件,enumerate()回傳的迭代器的__next__()方法回傳一個元組,里面包含一個計數值(從start開始,默認為0)和通過迭代iterable獲得的值,如果start從0開始,相當于獲取了串列的下標,
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
find_last_index
類似的,可以實作find_last_index函式,使用lst[::-1]切片形式,將串列倒序,然后使用len(lst)和倒序后的串列中第一個符合判別函式的元素的位置,計算該元素在原串列中的位置,
def find_last_index(lst, fn):
return len(lst) - 1 - next(i for i, x in enumerate(lst[::-1]) if fn(x))
# EXAMPLES
find_last_index([1, 2, 3, 4], lambda n: n % 2 == 1) # 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/376843.html
標籤:Python
