Python代碼閱讀(第44篇):尋找符合條件的元素的位置


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獲得的值。如果start0開始,相當於獲取了列表的下標。

>>> 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM