Python中的 any() 函數(shù)和 all() 函數(shù)
回想下,在 Python 中編程時(shí),你是否曾經(jīng)需要檢查某個(gè)可迭代對(duì)象(如列表)中的任何元素或所有元素的計(jì)算結(jié)果是否為True?
假設(shè),我們要判斷數(shù)字列表a的所有數(shù)字是否都大于0,此時(shí)你估計(jì)會(huì)這么干:
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è)下次我們要判斷其他條件,如每個(gè)元素都是偶數(shù)或奇數(shù)?難道每次都要寫一個(gè)函數(shù)然后for循環(huán)遍歷嗎?
其實(shí)python中有兩個(gè)神奇的函數(shù)any()和all(),他們可以快速完成上面類似的任務(wù)!
接下來,我們將分享 Python 的 any() 和 all() 函數(shù),并使用簡(jiǎn)單的示例來了解它們的工作原理。
Python 中的布爾數(shù)據(jù)類型
在學(xué)習(xí) any() 和 all() 之前,先快速回顧一下 Python 中的布爾數(shù)據(jù)類型。你可以在任何 Python 對(duì)象上調(diào)用 bool() 以獲取其真假值。如下代碼示例:
# None 的真假值是 False
print(bool(None))
# 輸出 False
# 一個(gè)空字符串("")的真假值是 False
print(bool(""))
# 輸出 False
# 一個(gè)空字符串或任何可迭代對(duì)象的真假值是 False
print(bool([]))
# 輸出 False
# 0 {int (0), float (0.0) 和 complex (0j)} 的真假值是 False
print(bool(0))
# 輸出 False
如上面的代碼所示,可知:
None的真假值為False- 數(shù)字零(
0)——整數(shù)、浮點(diǎn)數(shù)和0的復(fù)數(shù)表示——都是False - 所有空的可迭代對(duì)象(如列表、元組和字符串)的真假值為
False。
也就是說,所有非零值和非空可迭代對(duì)象都為True,這是相當(dāng)直觀的。
請(qǐng)記?。?strong>所有非零值和非空可迭代對(duì)象都為True,這是相當(dāng)直觀的!
如何在 Python 中使用 any() 函數(shù)
讓我們了解 any() 函數(shù)的語法,先看一些簡(jiǎn)單的例子,之后再看更有用的例子。
?? 語法 :any(iterable)
- 對(duì)于迭代中的任何
x,如果bool(x)是True,返回True - 如果迭代是空,返回
False
因此,any() 函數(shù)將一個(gè)可迭代對(duì)象作為參數(shù),只要該可迭代對(duì)象中至少有一項(xiàng)為 True,就返回 True。
下面是一些簡(jiǎn)單的例子來驗(yàn)證 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
如何用any() 函數(shù)檢查字符串中的數(shù)字
現(xiàn)在讓我們使用 any() 函數(shù)來檢查字符串中是否有任何數(shù)字。讓我們把步驟寫下來:
- 檢查:字符串中是否有任何數(shù)字
- 遍歷字符串以訪問字符串中的每個(gè)字符
- 通過調(diào)用
isdigit()方法檢查每個(gè)字符是否是數(shù)字 - 如果被測(cè)字符是數(shù)字,則
isdigit()返回True,否則返回False
列表推導(dǎo)式(list comprehension)對(duì)于在列表中收集所有這些真假值非常有幫助。這是一個(gè)快速回顧:
# 列表推導(dǎo)式
[output_expression for every_item in an_iterable]
|
|
V
result of doing something on each item in the iterable
# 本質(zhì)上,循環(huán)遍歷迭代,對(duì)每一項(xiàng)進(jìn)行操作,然后返回操作的結(jié)果。
如下面的代碼片段所示,我們的示例字符串 coding**is**cool**345 包含數(shù)字。
因此,對(duì)字符串調(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
請(qǐng)注意 are_there_digits 是一個(gè)列表,其項(xiàng)數(shù)與字符串的長度一樣多。
對(duì)于字符串中的每個(gè)字符,都有一個(gè)對(duì)應(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]
如何用any()函數(shù)檢查字符串中的字母
讓我們?cè)倥e一個(gè)類似的例子。這一次,讓我們檢查字符串中的字母。
被測(cè)試的字符串***456278)))是不包含字母的 -- 調(diào)用 any() 會(huì)按預(yù)期返回 False。對(duì)于字符串中的每個(gè)字符,調(diào)用 isalpha() 方法檢查它是否是一個(gè)字母。
my_string = "***456278)))" num = [char.isalpha() for char in my_string] print(any(num)) # Output False
如何用any()函數(shù)將多個(gè)條件與邏輯 OR 組合在一起
假設(shè)你有 N 個(gè)條件 c1、c2、c3...cN,考慮下面的偽代碼:
if c1 or c2 or ... c_(N-1) or CN:
# DO THIS
pass
else:
# DO THIS
pass
你現(xiàn)在可以將所有這些條件收集在一個(gè)可迭代對(duì)象中,例如列表或元組,然后對(duì)該可迭代對(duì)象調(diào)用 any() 以檢查一個(gè)或多個(gè)條件是否為 True,如下所示。是不是很簡(jiǎn)單? ??
conditions = [c1, c2, ..., c_N]
if any(conditions):
# DO THIS
pass
else:
# DO THIS
pass
如何使用 all() 函數(shù)
讓我們從 all() 函數(shù)的語法開始:
?? 語法:all(iterable)
- 如果
bool(x)對(duì)于可迭代對(duì)象中的所有值x為True,則返回True。 - 如果可迭代對(duì)象為空,則返回
True。
all() 函數(shù)接受一個(gè)可迭代對(duì)象作為參數(shù),僅當(dāng)可迭代對(duì)象中的所有項(xiàng)的計(jì)算結(jié)果為 True,或可迭代對(duì)象為空時(shí)才返回 True。在所有其他情況下,all() 函數(shù)返回 False。
如何用all()函數(shù)檢查字符串中的字母
讓我們以類似的例子來檢查字符串的某些特征。
測(cè)試字符串 coding**is**cool 除了字母之外還包含特殊字符 *。因此,當(dāng)我們使用 all() 函數(shù)檢查字符串中的所有字符是否都是字母時(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]
請(qǐng)注意列表 are_all_letters 如何在字符串中出現(xiàn) * 的所有位置都有 False 值。
如何用all()函數(shù)檢查字符串中的數(shù)字
現(xiàn)在讓我們使用 all() 函數(shù)檢查字符串中的所有字符是否都是數(shù)字。測(cè)試字符串 56456278 僅包含數(shù)字,因此,調(diào)用 all() 應(yīng)該返回 True,因?yàn)榱斜硗茖?dǎo)式為我們提供了一個(gè) 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]
如何用Pythonall()函數(shù)用邏輯 AND 組合多個(gè)條件
假設(shè)你有 N 個(gè)條件 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ù)來使這一切變得更加簡(jiǎn)潔。
conditions = [c1, c2, ..., c_N]
if all(conditions):
# DO THIS
pass
else:
# DO THIS
pass到此這篇關(guān)于Python中的 any() 函數(shù)和 all() 函數(shù)的文章就介紹到這了,更多相關(guān) any 和 all() 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pycharm 將django中多個(gè)app放到同個(gè)文件夾apps的處理方法
今天小編就為大家分享一篇pycharm 將django中多個(gè)app放到同個(gè)文件夾apps的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
python神經(jīng)網(wǎng)絡(luò)AlexNet分類模型訓(xùn)練貓狗數(shù)據(jù)集
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)AlexNet分類模型訓(xùn)練貓狗數(shù)據(jù)集,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python獲取當(dāng)前目錄下所有文件的6種方法總結(jié)
這篇文章主要給大家介紹了關(guān)于Python獲取當(dāng)前目錄下所有文件的6種方法,要獲取當(dāng)前目錄下的所有目錄,可以使用Python內(nèi)置的os模塊中的listdir()函數(shù)和isdir()函數(shù),需要的朋友可以參考下2023-08-08
使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作
這篇文章主要介紹了使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
4種非常實(shí)用的python內(nèi)置數(shù)據(jù)結(jié)構(gòu)
這篇文章主要介紹了4種非常實(shí)用的python內(nèi)置數(shù)據(jù)結(jié)構(gòu),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04
使用python svm實(shí)現(xiàn)直接可用的手寫數(shù)字識(shí)別
這篇文章主要介紹了使用python svm實(shí)現(xiàn)直接可用的手寫數(shù)字識(shí)別,現(xiàn)在網(wǎng)上很多代碼是良莠不齊,真是一言難盡,于是記錄一下,能夠運(yùn)行成功并識(shí)別成功的一個(gè)源碼2021-08-08
python 判斷參數(shù)為Nonetype類型或空的實(shí)例
今天小編就為大家分享一篇python 判斷參數(shù)為Nonetype類型或空的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10

