網站首頁 編程語言 正文
回想下,在 Python 中編程時,你是否曾經需要檢查某個可迭代對象(如列表)中的任何元素或所有元素的計算結果是否為True
?
假設,我們要判斷數字列表a
的所有數字是否都大于0
,此時你估計會這么干:
a = [1, 2, 3, 4] def is_big_0(l): # 判斷列表l的所有數字是否大于,如果大于0則返回True,否則返回False for i in l: if i <= 0: return False return True print(a)
停頓幾秒,想一想,假設下次我們要判斷其他條件,如每個元素都是偶數或奇數?難道每次都要寫一個函數然后for循環遍歷嗎?
其實python中有兩個神奇的函數any()
和all()
,他們可以快速完成上面類似的任務!
接下來,我們將分享 Python 的?any()
?和?all()
?函數,并使用簡單的示例來了解它們的工作原理。
Python 中的布爾數據類型
在學習?any()
?和?all()
?之前,先快速回顧一下 Python 中的布爾數據類型。你可以在任何 Python 對象上調用?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
- 數字零(
0
)——整數、浮點數和?0
?的復數表示——都是?False
- 所有空的可迭代對象(如列表、元組和字符串)的真假值為?
False
。
也就是說,所有非零值和非空可迭代對象都為True
,這是相當直觀的。
請記住:所有非零值和非空可迭代對象都為True
,這是相當直觀的!
如何在 Python 中使用 any() 函數
讓我們了解?any()
?函數的語法,先看一些簡單的例子,之后再看更有用的例子。
?? 語法?:any(iterable)
- 對于迭代中的任何?
x
,如果?bool(x)
?是?True
,返回?True
- 如果迭代是空,返回?
False
因此,any()
?函數將一個可迭代對象作為參數,只要該可迭代對象中至少有一項為?True
,就返回?True
。
下面是一些簡單的例子來驗證?any()
?函數是如何工作的:
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() 函數檢查字符串中的數字
現在讓我們使用?any()
?函數來檢查字符串中是否有任何數字。讓我們把步驟寫下來:
- 檢查:字符串中是否有任何數字
- 遍歷字符串以訪問字符串中的每個字符
- 通過調用?
isdigit()
?方法檢查每個字符是否是數字 - 如果被測字符是數字,則?
isdigit()
?返回?True
,否則返回?False
列表推導式(list comprehension)對于在列表中收集所有這些真假值非常有幫助。這是一個快速回顧:
# 列表推導式 [output_expression for every_item in an_iterable] | | V result of doing something on each item in the iterable # 本質上,循環遍歷迭代,對每一項進行操作,然后返回操作的結果。
如下面的代碼片段所示,我們的示例字符串?coding**is**cool**345
?包含數字。
因此,對字符串調用?any()
?函數應該返回?True
。我們使用列表推導式來根據字符是否為數字來獲取?True
?和?False
?值的列表。
my_string = "coding**is**cool**345" # 列表推導 are_there_digits = [char.isdigit() for char in my_string] # 調用any函數 print(any(are_there_digits)) # 輸出 True
請注意?are_there_digits
?是一個列表,其項數與字符串的長度一樣多。
對于字符串中的每個字符,都有一個對應的真假值——如果字符是數字,則為?True
,如果字符不是數字,則為?False
,如下所示:
my_string = "coding**is**cool**345" # 列表推導 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()函數檢查字符串中的字母
讓我們再舉一個類似的例子。這一次,讓我們檢查字符串中的字母。
被測試的字符串***456278)))
是不包含字母的 -- 調用?any()
?會按預期返回?False
。對于字符串中的每個字符,調用?isalpha()
?方法檢查它是否是一個字母。
my_string = "***456278)))" num = [char.isalpha() for char in my_string] print(any(num)) # Output False
如何用any()
函數將多個條件與邏輯 OR 組合在一起
假設你有 N 個條件?c1
、c2
、c3
...cN
,考慮下面的偽代碼:
if c1 or c2 or ... c_(N-1) or CN: # DO THIS pass else: # DO THIS pass
你現在可以將所有這些條件收集在一個可迭代對象中,例如列表或元組,然后對該可迭代對象調用?any()
?以檢查一個或多個條件是否為?True
,如下所示。是不是很簡單? ??
conditions = [c1, c2, ..., c_N] if any(conditions): # DO THIS pass else: # DO THIS pass
如何使用?all()
?函數
讓我們從?all()
?函數的語法開始:
?? 語法:all(iterable)
- 如果?
bool(x)
?對于可迭代對象中的所有值?x
?為?True
,則返回?True
。 - 如果可迭代對象為空,則返回?
True
。
all()
?函數接受一個可迭代對象作為參數,僅當可迭代對象中的所有項的計算結果為?True
,或可迭代對象為空時才返回?True
。在所有其他情況下,all()
?函數返回?False
。
如何用all()函數檢查字符串中的字母
讓我們以類似的例子來檢查字符串的某些特征。
測試字符串?coding**is**cool
?除了字母之外還包含特殊字符?*
。因此,當我們使用?all()
?函數檢查字符串中的所有字符是否都是字母時,我們應該得到?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
?如何在字符串中出現?*
?的所有位置都有?False
?值。
如何用all()函數檢查字符串中的數字
現在讓我們使用?all()
?函數檢查字符串中的所有字符是否都是數字。測試字符串?56456278
?僅包含數字,因此,調用?all()
?應該返回?True
,因為列表推導式為我們提供了一個?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()
函數用邏輯 AND 組合多個條件
假設你有 N 個條件?c1
、c2
、c3
...cN
,考慮下面的偽代碼:
if c1 and c2 and ... c_(N-1) and CN: # DO THIS pass else: # DO THIS pass
你可以使用?all()
?函數通過收集迭代中的條件,然后在迭代上調用?all()
?函數來使這一切變得更加簡潔。
conditions = [c1, c2, ..., c_N] if all(conditions): # DO THIS pass else: # DO THIS pass
原文鏈接:https://juejin.cn/post/7084830431786303525
相關推薦
- 2022-08-28 SpringBoot 實現自定義的 starter
- 2022-12-08 python第三方庫easydict的使用實例詳解_python
- 2022-11-22 XML實體注入深入理解_XML示例
- 2022-05-16 通過T-SQL語句創建游標與實現數據庫加解密功能_MsSql
- 2023-03-22 gin正確多次讀取http?request?body內容實現詳解_Golang
- 2022-01-17 將字符串轉換成時間戳,yyyymmss到yyyy-mm-dd ,之后從時間戳轉換成時間格式字符串
- 2022-04-24 Python元素集合的列表切片_python
- 2022-12-19 nginx?rewrite參數解析_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支