App下載

Python any() 和 all() 函數(shù)——實(shí)例介紹

巴拉普里亞 C 2021-08-30 09:53:23 瀏覽數(shù) (3891)
反饋

在 Python 中編程時,您是否曾經(jīng)需要檢查可迭代對象中的任何項或所有項的計算結(jié)果是否為True?下次您需要這樣做時,請務(wù)必使用漂亮的函數(shù)any()和all()。在本教程中,我們將了解 Python的any()和all()函數(shù),并使用簡單的示例來了解它們的工作原理。

Python 中的布爾數(shù)據(jù)類型

在我們進(jìn)入any()和all()之前,讓我們快速回顧一下 Python 中的布爾數(shù)據(jù)類型。您可以調(diào)用bool()方法來獲取任何 Python 對象的真值。您可以在您喜歡的 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有一個真值False,
  • 數(shù)字 zero( 0) – 整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)表示0并且都有一個真值False,
  • 所有空的可迭代對象(如列表、元組和字符串)的真值為False。

也就是說,所有非零值和非空可迭代對象的真值都是相當(dāng)直觀的True。

如何在 Python 中使用 any() 函數(shù)

讓我們了解any()函數(shù)的語法,看一些簡單的例子,然后再看更有用的例子。

語法:any(iterable)

  • 返回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

如何使用 Python 的 any() 函數(shù)檢查字符串中的數(shù)字

現(xiàn)在讓我們使用該any()函數(shù)來檢查字符串中是否有任何數(shù)字。讓我們把步驟寫下來。

  • 檢查:字符串中是否有任何數(shù)字?
  • 遍歷字符串以訪問字符串中的每個字符。
  • 通過調(diào)用isdigit()它的方法檢查每個字符是否是數(shù)字。
  • 如果被測字符是一個數(shù)字,isdigit()返回True,否則返回False。

列表推導(dǎo)式對于在列表中收集所有這些真值非常有幫助。這是一個快速回顧:

 # 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

請注意are_there_digits列表的項數(shù)與字符串的長度一樣多。

對于字符串中的每個字符,都有一個對應(yīng)的真值——如果字符是數(shù)字對應(yīng)True,如果字符不是數(shù)字對應(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ù)檢查字符串中的字母

讓我們再舉一個類似的例子。這一次,讓我們檢查字符串中字母的出現(xiàn)。

被測試的字符串***456278)))不包含字母——按預(yù)期調(diào)用any()返回False。對于字符串中的每個字符,調(diào)用該isalpha()方法檢查它是否是一個字母。

my_string = "***456278)))"
num = [char.isalpha() for char in my_string]
print(any(num))

# Output
False

這is_letter是一個False值列表,如下所示:

print(is_letter)

# Output
[False, False, False, False, False, False, False, False, False, False, False, False]

如何使用 Python 的 any() 函數(shù)將多個條件與邏輯或組合在一起

假設(shè)您決定提高工作效率并寫下下面顯示的列表。然而,你選擇不苛求自己,并決定只要清單中的一項發(fā)生,你就可以擁有很多糖果![


請注意我們?nèi)绾慰紤]多個條件,但即使其中一個評估為 ,也會選擇糖果True。

這與if您需要檢查邏輯or運(yùn)算符鏈接的多個條件是否計算為 的語句非常相似True嗎?是的,它是這樣的,并且該any()功能在這樣做時可以派上用場。

假設(shè)您N有條件c1, c2, c3, ..., cN。考慮下面的偽代碼:

if c1 or c2 or ... c_(N-1) or CN:
	# DO THIS

else:
	# DO THIS

您現(xiàn)在可以將所有這些條件收集在一個可迭代對象中,例如列表或元組,然后調(diào)用any()該可迭代對象來檢查一個或多個條件是否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如果可迭代對象為空,則返回。

該all()函數(shù)將一個可迭代對象作為參數(shù),True僅當(dāng)可迭代對象中的所有項計算結(jié)果為True或可迭代對象為空時才返回。在所有其他情況下,all()函數(shù)返回False。

如何使用 Python 的 all() 函數(shù)檢查字符串中的字母

讓我們以類似的例子來檢查字符串的某些特征。

除了字母之外,測試字符串還coding**is**cool包含特殊字符*。因此,當(dāng)我們使用該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]

注意列表如何在字符串中出現(xiàn)的所有位置are_all_letters都有False值*。

如何使用 Python 的 all() 函數(shù)檢查字符串中的數(shù)字

現(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]

如何使用 Python 的 all() 函數(shù)用邏輯 AND 組合多個條件

讓我們考慮以下示例。這一次,您要爭奪 iPad,而且條件更加嚴(yán)格。您必須完成列表中的所有任務(wù)才能從您的堂兄那里獲得 iPad。


現(xiàn)在,這與使用if語句檢查由邏輯and運(yùn)算符鏈接的多個條件是否評估為 非常相似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í)愉快!


0 人點(diǎn)贊