您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Python中的any()函數(shù)和all()函數(shù)怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習“Python中的any()函數(shù)和all()函數(shù)怎么用”吧!
回想下,在 Python 中編程時,你是否曾經(jīng)需要檢查某個可迭代對象(如列表)中的任何元素或所有元素的計算結(jié)果是否為True
?
假設(shè),我們要判斷數(shù)字列表a
的所有數(shù)字是否都大于0
,此時你估計會這么干:
a = [1, 2, 3, 4] def is_big_0(l): # 判斷列表l的所有數(shù)字是否大于,如果大于0則返回True,否則返回False for i in l: if i <= 0: return False return True print(a)
停頓幾秒,想一想,假設(shè)下次我們要判斷其他條件,如每個元素都是偶數(shù)或奇數(shù)?難道每次都要寫一個函數(shù)然后for循環(huán)遍歷嗎?
其實python中有兩個神奇的函數(shù)any()
和all()
,他們可以快速完成上面類似的任務(wù)!
接下來,我們將分享 Python 的 any()
和 all()
函數(shù),并使用簡單的示例來了解它們的工作原理。
在學(xué)習 any()
和 all()
之前,先快速回顧一下 Python 中的布爾數(shù)據(jù)類型。你可以在任何 Python 對象上調(diào)用 bool()
以獲取其真假值。如下代碼示例:
# None 的真假值是 False print(bool(None)) # 輸出 False # 一個空字符串("")的真假值是 False print(bool("")) # 輸出 False # 一個空字符串或任何可迭代對象的真假值是 False print(bool([])) # 輸出 False # 0 {int (0), float (0.0) 和 complex (0j)} 的真假值是 False print(bool(0)) # 輸出 False
如上面的代碼所示,可知:
None
的真假值為 False
數(shù)字零(0
)——整數(shù)、浮點數(shù)和 0
的復(fù)數(shù)表示——都是 False
所有空的可迭代對象(如列表、元組和字符串)的真假值為 False
。
也就是說,所有非零值和非空可迭代對象都為True
,這是相當直觀的。
請記?。?strong>所有非零值和非空可迭代對象都為True
,這是相當直觀的!
讓我們了解 any()
函數(shù)的語法,先看一些簡單的例子,之后再看更有用的例子。
???? 語法 :any(iterable)
對于迭代中的任何 x
,如果 bool(x)
是 True
,返回 True
如果迭代是空,返回 False
因此,any()
函數(shù)將一個可迭代對象作為參數(shù),只要該可迭代對象中至少有一項為 True
,就返回 True
。
下面是一些簡單的例子來驗證 any()
函數(shù)是如何工作的:
list_1 = [0, 0, 0, 1, 0, 0, 0, 0] # any(a list with at least one non-zero entry) returns True print(any(list_1)) # Output True list_2 = [0j, 0, 0, 0.0, 0, 0, 0.0, 0] # any(a list of zeros) returns False print(any(list_2)) # Output False list_3 = [True, False, False] # any(a list with at least one True value) returns True print(any(list_3)) # Output True list_4 = ["", "", "code more"] # any(a list with at least one non-empty string) returns True print(any(list_4)) # Output True list_5 = ["", "", ""] # any(a list of empty strings) returns False print(any(list_5)) # Output False
現(xiàn)在讓我們使用 any()
函數(shù)來檢查字符串中是否有任何數(shù)字。讓我們把步驟寫下來:
檢查:字符串中是否有任何數(shù)字
遍歷字符串以訪問字符串中的每個字符
通過調(diào)用 isdigit()
方法檢查每個字符是否是數(shù)字
如果被測字符是數(shù)字,則 isdigit()
返回 True
,否則返回 False
列表推導(dǎo)式(list comprehension)對于在列表中收集所有這些真假值非常有幫助。這是一個快速回顧:
# 列表推導(dǎo)式 [output_expression for every_item in an_iterable] | | V result of doing something on each item in the iterable # 本質(zhì)上,循環(huán)遍歷迭代,對每一項進行操作,然后返回操作的結(jié)果。
如下面的代碼片段所示,我們的示例字符串 coding**is**cool**345
包含數(shù)字。
因此,對字符串調(diào)用 any()
函數(shù)應(yīng)該返回 True
。我們使用列表推導(dǎo)式來根據(jù)字符是否為數(shù)字來獲取 True
和 False
值的列表。
my_string = "coding**is**cool**345" # 列表推導(dǎo) are_there_digits = [char.isdigit() for char in my_string] # 調(diào)用any函數(shù) print(any(are_there_digits)) # 輸出 True
請注意 are_there_digits
是一個列表,其項數(shù)與字符串的長度一樣多。
對于字符串中的每個字符,都有一個對應(yīng)的真假值——如果字符是數(shù)字,則為 True
,如果字符不是數(shù)字,則為 False
,如下所示:
my_string = "coding**is**cool**345" # 列表推導(dǎo) are_there_digits = [char.isdigit() for char in my_string] print(are_there_digits) # Output # [False, False, False, False, False, False, False, False, False, False, False, # False, False, False, False, False, False, False, True, True, True]
讓我們再舉一個類似的例子。這一次,讓我們檢查字符串中的字母。
被測試的字符串***456278)))
是不包含字母的 -- 調(diào)用 any()
會按預(yù)期返回 False
。對于字符串中的每個字符,調(diào)用 isalpha()
方法檢查它是否是一個字母。
my_string = "***456278)))" num = [char.isalpha() for char in my_string] print(any(num)) # Output False
any()
函數(shù)將多個條件與邏輯 OR 組合在一起假設(shè)你有 N 個條件 c1
、c2
、c3
...cN
,考慮下面的偽代碼:
if c1 or c2 or ... c_(N-1) or CN: # DO THIS pass else: # DO THIS pass
你現(xiàn)在可以將所有這些條件收集在一個可迭代對象中,例如列表或元組,然后對該可迭代對象調(diào)用 any()
以檢查一個或多個條件是否為 True
,如下所示。是不是很簡單? ????
conditions = [c1, c2, ..., c_N] if any(conditions): # DO THIS pass else: # DO THIS pass
all()
函數(shù)讓我們從 all()
函數(shù)的語法開始:
???? 語法:all(iterable)
如果 bool(x)
對于可迭代對象中的所有值 x
為 True
,則返回 True
。
如果可迭代對象為空,則返回 True
。
all()
函數(shù)接受一個可迭代對象作為參數(shù),僅當可迭代對象中的所有項的計算結(jié)果為 True
,或可迭代對象為空時才返回 True
。在所有其他情況下,all()
函數(shù)返回 False
。
讓我們以類似的例子來檢查字符串的某些特征。
測試字符串 coding**is**cool
除了字母之外還包含特殊字符 *
。因此,當我們使用 all()
函數(shù)檢查字符串中的所有字符是否都是字母時,我們應(yīng)該得到 False
。
my_string = "coding**is**cool" are_all_letters = [char.isalpha() for char in my_string] print(all(are_all_letters)) # Output False print(are_all_letters) # Output # [True, True, True, True, True, True, False, False, True, True, False, False, # True, True, True, True]
請注意列表 are_all_letters
如何在字符串中出現(xiàn) *
的所有位置都有 False
值。
現(xiàn)在讓我們使用 all()
函數(shù)檢查字符串中的所有字符是否都是數(shù)字。測試字符串 56456278
僅包含數(shù)字,因此,調(diào)用 all()
應(yīng)該返回 True
,因為列表推導(dǎo)式為我們提供了一個 True
值列表。
my_string = "56456278" are_all_digits = [char.isdigit() for char in my_string] print(all(are_all_digits)) # Output True print(are_all_digits) # Output [True, True, True, True, True, True, True, True]
all()
函數(shù)用邏輯 AND 組合多個條件假設(shè)你有 N 個條件 c1
、c2
、c3
...cN
,考慮下面的偽代碼:
if c1 and c2 and ... c_(N-1) and CN: # DO THIS pass else: # DO THIS pass
你可以使用 all()
函數(shù)通過收集迭代中的條件,然后在迭代上調(diào)用 all()
函數(shù)來使這一切變得更加簡潔。
conditions = [c1, c2, ..., c_N] if all(conditions): # DO THIS pass else: # DO THIS pass
到此,相信大家對“Python中的any()函數(shù)和all()函數(shù)怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。