在 Python 中編程時(shí),您是否曾經(jīng)需要檢查可迭代對(duì)象中的任何項(xiàng)或所有項(xiàng)的計(jì)算結(jié)果是否為True?下次您需要這樣做時(shí),請(qǐng)務(wù)必使用漂亮的函數(shù)any()和all()。在本教程中,我們將了解 Python的any()和all()函數(shù),并使用簡單的示例來了解它們的工作原理。
Python 中的布爾數(shù)據(jù)類型
在我們進(jìn)入any()和all()之前,讓我們快速回顧一下 Python 中的布爾數(shù)據(jù)類型。您可以調(diào)用bool()方法來獲取任何 Python 對(duì)象的真值。您可以在您喜歡的 IDE 中運(yùn)行下面的代碼示例。
# truth value of None is False
print(bool(None))
# Output
False
# truth value of an empty string ("") is False
print(bool(""))
# Output
False
# truth value of an empty list (or any iterable) is False
print(bool([]))
# Output
False
# truth value of 0 {int (0), float (0.0) and complex (0j)} is False
print(bool(0))
# Output
False
如上面的片段所示,
- None有一個(gè)真值False,
- 數(shù)字 zero( 0) – 整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)表示0并且都有一個(gè)真值False,
- 所有空的可迭代對(duì)象(如列表、元組和字符串)的真值為False。
也就是說,所有非零值和非空可迭代對(duì)象的真值都是相當(dāng)直觀的True。
如何在 Python 中使用 any() 函數(shù)
讓我們了解any()函數(shù)的語法,看一些簡單的例子,然后再看更有用的例子。
語法:any(iterable)
- 返回True ,只要該可迭代對(duì)象中至少有一項(xiàng)是 就返回True。
- 如果可迭代對(duì)象為空,則返回False。
因此,該any()函數(shù)將一個(gè)可迭代對(duì)象作為參數(shù),并且True只要該可迭代對(duì)象中至少有一項(xiàng)是 就返回True。
下面是幾個(gè)簡單的例子來驗(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
如何使用 Python 的 any() 函數(shù)檢查字符串中的數(shù)字
現(xiàn)在讓我們使用該any()函數(shù)來檢查字符串中是否有任何數(shù)字。讓我們把步驟寫下來。
- 檢查:字符串中是否有任何數(shù)字?
- 遍歷字符串以訪問字符串中的每個(gè)字符。
- 通過調(diào)用isdigit()它的方法檢查每個(gè)字符是否是數(shù)字。
- 如果被測字符是一個(gè)數(shù)字,isdigit()返回True,否則返回False。
列表推導(dǎo)式對(duì)于在列表中收集所有這些真值非常有幫助。這是一個(gè)快速回顧:
# List Comprehension
[output_expression for every_item in an_iterable]
|
|
V
result of doing something on each item in the iterable
# In essence, Loop through the iterable, do something on each item and
return the result of the operation.
如下面的代碼片段所示,我們的示例字符串coding**is**cool**345包含數(shù)字。
因此,any()在字符串上調(diào)用函數(shù)應(yīng)該返回True. 我們使用列表理解來根據(jù)字符是否為數(shù)字來獲取True和False值的列表。
my_string = "coding**is**cool**345"
are_there_digits = [char.isdigit() for char in my_string]
print(any(are_there_digits))
# Output
True
請(qǐng)注意are_there_digits列表的項(xiàng)數(shù)與字符串的長度一樣多。
對(duì)于字符串中的每個(gè)字符,都有一個(gè)對(duì)應(yīng)的真值——如果字符是數(shù)字對(duì)應(yīng)True,如果字符不是數(shù)字對(duì)應(yīng)False,如下所示。
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]
如何使用 Python 的 any() 函數(shù)檢查字符串中的字母
讓我們再舉一個(gè)類似的例子。這一次,讓我們檢查字符串中字母的出現(xiàn)。
被測試的字符串***456278)))不包含字母——按預(yù)期調(diào)用any()返回False。對(duì)于字符串中的每個(gè)字符,調(diào)用該isalpha()方法檢查它是否是一個(gè)字母。
my_string = "***456278)))"
num = [char.isalpha() for char in my_string]
print(any(num))
# Output
False
這is_letter是一個(gè)False值列表,如下所示:
print(is_letter)
# Output
[False, False, False, False, False, False, False, False, False, False, False, False]
如何使用 Python 的 any() 函數(shù)將多個(gè)條件與邏輯或組合在一起
假設(shè)您決定提高工作效率并寫下下面顯示的列表。然而,你選擇不苛求自己,并決定只要清單中的一項(xiàng)發(fā)生,你就可以擁有很多糖果![
請(qǐng)注意我們?nèi)绾慰紤]多個(gè)條件,但即使其中一個(gè)評(píng)估為 ,也會(huì)選擇糖果True。
這與if您需要檢查邏輯or運(yùn)算符鏈接的多個(gè)條件是否計(jì)算為 的語句非常相似True嗎?是的,它是這樣的,并且該any()功能在這樣做時(shí)可以派上用場。
假設(shè)您N有條件c1, c2, c3, ..., cN。考慮下面的偽代碼:
if c1 or c2 or ... c_(N-1) or CN:
# DO THIS
else:
# DO THIS
您現(xiàn)在可以將所有這些條件收集在一個(gè)可迭代對(duì)象中,例如列表或元組,然后調(diào)用any()該可迭代對(duì)象來檢查一個(gè)或多個(gè)條件是否True為 ,如下所示。這不簡單嗎?
conditions = [c1,c2,..., c_N]
if any(conditions):
# DO THIS
else:
# DO THIS
如何在 Python 中使用 all() 函數(shù)
讓我們從all()函數(shù)的語法開始。
語法:all(iterable)
- 返回True如果bool(x)是True所有值x的迭代器。
- True如果可迭代對(duì)象為空,則返回。
該all()函數(shù)將一個(gè)可迭代對(duì)象作為參數(shù),True僅當(dāng)可迭代對(duì)象中的所有項(xiàng)計(jì)算結(jié)果為True或可迭代對(duì)象為空時(shí)才返回。在所有其他情況下,all()函數(shù)返回False。
如何使用 Python 的 all() 函數(shù)檢查字符串中的字母
讓我們以類似的例子來檢查字符串的某些特征。
除了字母之外,測試字符串還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]
注意列表如何在字符串中出現(xiàn)的所有位置are_all_letters都有False值*。
如何使用 Python 的 all() 函數(shù)檢查字符串中的數(shù)字
現(xiàn)在讓我們使用該all()函數(shù)檢查字符串中的所有字符是否都是數(shù)字。測試字符串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]
如何使用 Python 的 all() 函數(shù)用邏輯 AND 組合多個(gè)條件
讓我們考慮以下示例。這一次,您要爭奪 iPad,而且條件更加嚴(yán)格。您必須完成列表中的所有任務(wù)才能從您的堂兄那里獲得 iPad。
現(xiàn)在,這與使用if語句檢查由邏輯and運(yùn)算符鏈接的多個(gè)條件是否評(píng)估為 非常相似True,如下所示:
if c1 and c2 and ... c_(N-1) and CN:
# DO THIS
else:
# DO THIS
您可以使用該all()函數(shù)通過收集可迭代中的條件,然后在可迭代中調(diào)用該all()函數(shù)來使這一切更加簡潔。
conditions = [c1,c2,..., c_N]
if all(conditions):
# DO THIS
else:
# DO THIS
結(jié)論
我希望本教程能幫助您理解Python 中的any()和all()函數(shù)。
很快在另一篇文章中與大家見面。到此為止,祝學(xué)習(xí)愉快!