天天看點

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

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

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

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

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