程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

一文讓你徹底掌握【Python中的filter函數】

編輯:Python

任何事情都是由量變到質變的過程,學習Python也不例外。只有把一個語言中的常用函數了如指掌了,才能在處理問題的過程中得心應手,快速地找到最優方案。

本文和你一起來探索Python中的filter函數,讓你以最短的時間明白這個函數的原理。也可以利用碎片化的時間鞏固這個函數,讓你在處理工作過程中更高效。



一、filter函數的定義


filter函數是Python中常用的內置函數,調用無需加載庫,直接使用即可。它主要用來根據特定條件過濾迭代器中不符合條件的元素,返回一個惰性計算的filter對象或迭代器。需要用list函數進行轉換,才能得到符合的條件元素組成的新列表。

其基本調用語法如下:

filter(function or None, iterable)

function:函數,作用是對iterable中的每個元素判斷是否符合特定條件。

None:不調用任何函數,只對可迭代對象中的元素本身判斷真假,保留為真的元素。

iterables:可迭代對象(序列、字典等)。


二、filter函數實例

例1:求一個序列中大於零的元素組成的新序列


我們先來看下filter函數不加list的結果,代碼如下:

c = [-10, 28, 9, -5, 30, 5]
filter(lambda a:a>0, c)

得到結果:

<filter at 0x27950dbb9d0>

返回一個惰性計算的filter對象或迭代器。接下來看下用list函數進行轉換會得到什麼,代碼如下:

c = [-10, 28, 9, -5, 30, 5]
list(filter(lambda a:a>0, c))

得到結果:

[28, 9, 30, 5]

從結果知,filter函數的作用是挑選出了序列c中大於0的元素組成了新的對象或迭代器。通過list函數進行轉換,進而得到符合條件的元素組成的新列表。如果有朋友對代碼中的lambda函數不熟悉,可以參考【Python常用函數】一文讓你徹底掌握Python中的lambda函數。

例2:求序列中非零數組成的新序列


在filter函數定義中提到,filter函數中參數None表示不調用任何函數,只對可迭代對象中的元素本身判斷真假,保留為真的元素。

測試代碼如下:

#找出序列中的非0數
c2 = [4, 9, 0, -5, -8, 7, 0]
list(filter(None, c2))

得到結果:

[4, 9, -5, -8, 7]

由於0在Python中默認為False,非0默認為True,所以在篩選過程中對0進行了過濾。

例3:求字典中大於2的鍵組成的新序列


在filter函數定義中提到,它對可迭代對象進行處理,所以包括了列表和字典等對象。前兩個例題都是對列表進行處理,本例看下對字典的處理。代碼如下:

#找出字典中大於2的鍵
list(filter(lambda x:x>2, {
1:'楊紫', 2:'劉詩雯', 3:'張繼科', 4:'王明', 5:'劉明'}))

得到結果:

[3, 4, 5]

從結果知,filter函數對字典進行處理的時候,篩選的對象是字典的鍵,而不是字典的值。

例4:求100以內既是3的倍數又是奇數的正整數


最後我們來看一個小學常常碰到的題,求100以內既是3的倍數又是奇數的正整數。代碼如下:

#求100以內既是奇數又是3的倍數的正整數
import numpy as np
list(filter(lambda x:x%2!=0 and x%3==0, np.arange(1, 101)))

得到結果:

[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

其中np.arange(1, 101))表示1到100公差為1的等差數列。

x%2!=0表示該數不能整除2,即為奇數。

x%3==0表示該數能整除3,即為3的倍數。

可以人工復核一下,發現Python得到的結果是正確的。

至此,Python中的filter函數已講解完畢,如想了解更多Python中的函數,可以到 “阿黎逸陽的代碼” 公眾號中“學習Python”模塊相關文章。


你可能感興趣:
用Python繪制皮卡丘
用Python繪制詞雲圖
用Python繪制520永恆心動
Python人臉識別—我的眼裡只有你
Python畫好看的星空圖(唯美的背景)
【Python】情人節表白煙花(帶聲音和文字)
用Python中的py2neo庫操作neo4j,搭建關聯圖譜
Python浪漫表白源碼合集(愛心、玫瑰花、照片牆、星空下的告白)

長按(掃一掃)識別上方二維碼學習更多Python和建模知識,讓你的學習和工作更出彩。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved