網站首頁 編程語言 正文
今天的這一章節我們來學習一下,Python 中的三個高級函數,也被稱之為?魔法函數。之所以把他們交的這么高級,主要是因為它們返回的數據類型多數是?迭代器。
我們在上一章節有介紹過,迭代器?可以提升我們的代碼的執行效率、降低內存消耗。所以接下來我們就認識一下這些?魔法函數。
filter() 函數
filter() 函數 是python的一個內置函數。
filter() 函數的功能:可以將一個可遍歷的對象根據過濾條件,生成一個迭代器。(在python2.7版本,返回的是列表)
filter() 函數的使用方法:
用法:
filter(function, list)
參數介紹:
function:對list的每個item進行條件過濾的定義(主要對第二參數的每個成員進行判斷,滿足函數的要求,將會進入 filter 生成的迭代器)
list:需要過濾的列表 (其實這里不一定只可以放列表,放入的是可迭代對象)
演示案例如下(過濾出列表中的所有偶數):
def is_even(n): return n % 2 == 0 newlist = filter(is_even, [1, 2, 3, 4, 5, 6]) print(newlist, type(newlist)) # >>> 執行結果如下: # >>>for i in newlist: print(i) # >>> 執行結果如下: # >>> 2 # >>> 4 # >>> 6
PS:需要注意的是,這里的非偶數,雖然會被過濾函數拋棄,但是依然會存在于之前的列表中。
map() 函數
map() 函數 是python的一個內置函數。
map() 函數的功能:對列表中的每一個成員依次執行函數進行判斷,將執行的結果放到新 list 中,返回一個 map 對應的對象。
map() 函數的使用方法:
用法:
map(function, list)
參數介紹:
function:對 list 每個 item 進行條件滿足的判斷
list:需要過濾的列表 (其實這里不一定只可以放列表,放入的是可迭代對象)
演示案例如下(對列表中的每一個成員判斷是否大于1):
result = map(lambda x: x>1, [0, 1, 2, 3]) print(result, type(result)) # >>> 執行結果如下: # >>>
reduce() 函數
reduce() 函數 以前是python的一個內置函數,現在不是了。(在python 2.x版本的時候,reduce() 函數可以直接被調用;但是在 python 3.x 的版本中,由于返回的不是一個迭代器,所以需要先執行導入然后才可以繼續使用。導入語句 from functools import reduce)
reduce() 函數 的功能:對循環前后的兩個數據進行累加或者累乘。(實際上可以通過 lambda 對這兩個成員進行任何的處理)
reduce() 函數的使用方法:
用法:
reduce(function, list)
參數介紹:
function:對數據累加/累成的函數
list:需要過濾的列表 (其實這里不一定只可以放列表,放入的是可迭代對象)
演示案例如下(對循環前后的兩個數據進行累加或者累乘):
from functools import reduce result = reduce(lambda x, y: x + y, [1, 2, 3]) print(result, '---', type(result)) # >>> 執行結果如下: # >>> 6 ---from functools import reduce result = reduce(lambda x, y: x * y, [1, 3, 5]) print(result, '---', type(result)) # >>> 執行結果如下: # >>> 15 ---
filter() 函數 小實戰
scores = [("張三", 89, 90, 59), ("李四", 99, 49, 59), ("趙五", 99, 60, 20), ("王二麻子", 40, 94, 59), ("李雷", 89, 90, 59), ("李莉", 89, 90, 69), ("楚浠", 79, 90, 59), ("Neo", 85, 90, 59), ("Abby", 89, 91, 90)] def handle_filter(a): s = sorted(a[1:]) # 對三科成績進行排序 # 有 2 科成績在 80 分以上,并且有 1 科在 60 分以下的 if s[-2] > 80 and s[0] < 60: return True # 有 1 科成績在 90 分以上,另外 2 科成績都在 60 分以下 if s[-1] > 90 and s[1] < 60: return True if s[-2] > 80 and sum(s)/len(s) < 60: # 有 1 科成績在 90 分以上, 且 3 科的平均分在 70 分以下 return True return False newIter = list(filter(handle_filter, scores)) print(newIter) # >>> 執行結果如下: # >>> [('張三', 89, 90, 59), ('李四', 99, 49, 59), ('王二麻子', 40, 94, 59), ('李雷', 89, 90, 59), ('Neo', 85, 90, 59)]
原文鏈接:https://blog.csdn.net/weixin_42250835/article/details/123911713
相關推薦
- 2022-11-21 Python?tabulate結合loguru打印出美觀方便的日志記錄_python
- 2022-08-01 GoLand利用plantuml生成UML類圖_Golang
- 2022-06-12 C語言實題講解快速掌握單鏈表上_C 語言
- 2022-09-13 C#中的modbus?Tcp協議的數據抓取和使用解析_C#教程
- 2022-11-12 C語言字符串與字符數組面試題中最易錯考點詳解_C 語言
- 2022-04-18 C#實現彈窗提示輸入密碼_C#教程
- 2022-04-09 SpringMVC 基礎配置文件(簡潔版本)
- 2022-01-30 uniapp H5刷新404問題解決 apache配置
- 最近更新
-
- 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同步修改后的遠程分支