App下載

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

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

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

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

在我們進(jìn)入any()和all()之前,讓我們快速回顧一下 Python 中的布爾數(shù)據(jù)類型。您可以調(diào)用bool()方法來(lái)獲取任何 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。

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

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

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

語(yǔ)法:any(iterable)

  • 返回True ,只要該可迭代對(duì)象中至少有一項(xiàng)是 就返回True。
  • 如果可迭代對(duì)象為空,則返回False。

因此,該any()函數(shù)將一個(gè)可迭代對(duì)象作為參數(shù),并且True只要該可迭代對(duì)象中至少有一項(xiàng)是 就返回True。

下面是幾個(gè)簡(jiǎn)單的例子來(lái)驗(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ù)來(lái)檢查字符串中是否有任何數(shù)字。讓我們把步驟寫(xiě)下來(lái)。

  • 檢查:字符串中是否有任何數(shù)字?
  • 遍歷字符串以訪問(wèn)字符串中的每個(gè)字符。
  • 通過(guò)調(diào)用isdigit()它的方法檢查每個(gè)字符是否是數(shù)字。
  • 如果被測(cè)字符是一個(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. 我們使用列表理解來(lái)根據(jù)字符是否為數(shù)字來(lái)獲取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ù)與字符串的長(zhǎng)度一樣多。

對(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ù)檢查字符串中的字母

讓我們?cè)倥e一個(gè)類似的例子。這一次,讓我們檢查字符串中字母的出現(xiàn)。

被測(cè)試的字符串***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ě)下下面顯示的列表。然而,你選擇不苛求自己,并決定只要清單中的一項(xiàng)發(fā)生,你就可以擁有很多糖果![


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

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

假設(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ì)象來(lái)檢查一個(gè)或多個(gè)條件是否True為 ,如下所示。這不簡(jiǎn)單嗎?

conditions = [c1,c2,..., c_N]

if any(conditions):
	# DO THIS
else:
	# DO THIS

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

讓我們從all()函數(shù)的語(yǔ)法開(kāi)始。

語(yǔ)法:all(iterable)

  • 返回True如果bool(x)是True所有值x的迭代器。
  • True如果可迭代對(duì)象為空,則返回。

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

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

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

除了字母之外,測(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]

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

如何使用 Python 的 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]

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

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


現(xiàn)在,這與使用if語(yǔ)句檢查由邏輯and運(yùn)算符鏈接的多個(gè)條件是否評(píng)估為 非常相似True,如下所示:

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

else:
	# DO THIS

您可以使用該all()函數(shù)通過(guò)收集可迭代中的條件,然后在可迭代中調(diào)用該all()函數(shù)來(lái)使這一切更加簡(jiǎn)潔。

conditions = [c1,c2,..., c_N]

if all(conditions):
	# DO THIS
else:
	# DO THIS

結(jié)論

我希望本教程能幫助您理解Python 中的any()和all()函數(shù)。

很快在另一篇文章中與大家見(jiàn)面。到此為止,祝學(xué)習(xí)愉快!


0 人點(diǎn)贊