Python代碼閱讀(第8篇):列表元素邏輯判斷


Python 代碼閱讀合集介紹:為什么不推薦Python初學者直接看項目源碼

本篇閱讀的三份代碼的功能分別是判斷列表中的元素是否都符合給定的條件;判斷列表中是否存在符合給定的條件的元素;以及判斷列表中的元素是否都不符合給定的條件。

本篇閱讀的代碼片段來自於30-seconds-of-python。

every

def every(lst, fn=lambda x: x):
  return all(map(fn, lst))

# EXAMPLES
every([4, 2, 3], lambda x: x > 1) # True
every([1, 2, 3]) # True

every用於判斷列表lst中的元素是否都符合給定的判斷條件fn

代碼中首先使用map返回一個迭代器,該迭代器會將判斷條件fn應用於所有的列表元素上。然后使用all函數判斷迭代器中的元素是否都為True

all(iterable) 接收一個可迭代對象,如果這個對象中的所有元素都為True,則函數返回True。注意,當該對象為空時,也返回True。該函數等價於:

def all(iterable):
  for element in iterable:
    if not element:
      return False
  return True

some

def some(lst, fn=lambda x: x):
  return any(map(fn, lst))

# EXAMPLES
some([0, 1, 2, 0], lambda x: x >= 2 ) # True
some([0, 0, 1, 0]) # True

some用於判斷列表lst列表中是否存在符合給定的條件fn的元素。

代碼中首先使用map返回一個迭代器,該迭代器會將判斷條件fn應用於所有的列表元素上。然后使用any函數判斷迭代器中是否至少有一個元素為True

any(iterable) 接收一個可迭代對象,如果這個對象中有任一元素為True,則函數返回True。注意,當該對象為空時,返回False。該函數等價於:

def any(iterable):
  for element in iterable:
    if element:
      return True
  return False

none

def none(lst, fn=lambda x: x):
  return all(not fn(x) for x in lst)

# EXAMPLES
none([0, 1, 2, 0], lambda x: x >= 2 ) # False
none([0, 0, 0]) # True

none用於判斷列表lst中的元素是否都不符合給定的判斷條件fn

代碼中首先使用生成器表達式生成一個生成器,該生成器會將判斷條件not fn應用於所有的列表元素上。然后使用all函數判斷迭代器中的元素是否都為True

lst = [0, 1, 2, 0]

def fn(x):
  return x >= 2

type(not fn(x) for x in lst) # <class 'generator'>


免責聲明!

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



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