博友們,你們好,很高興能在這里和大家分享技術文章,我是
Amo Xiang,是一名在職企業員工,Amo來源于上家公司的英文名,本意是愛,作為剛入行幾年互聯網行業的小白,博主寫博客一方面是為了記錄自己的學習程序以及所犯的錯誤,更多的是希望能夠幫助到很多處于起步階段的萌新,讓他們少走彎路,在撰寫文章時,參考了大量書籍及一些互聯網大佬的資源,并結合了自己的作業經驗,博主本著科學、嚴謹的態度、力求精益求精,但疏漏之處在所難免,敬請廣大博友批評指正,博客主頁:https://blog.csdn.net/xw1680?spm=1011.2124.3001.5113
目錄
- 1. filter() 函式的介紹
- 1.1 功能
- 1.2 語法
- 2. filter() 函式的應用
- 2.1 filter() 函式的基本應用
- 2.2 篩選指定范圍的資料
- 2.3 篩選型別不是字符的元素
- 2.4 取出字串中的數字并轉換為整型
- 2.5 去除序列中所有值為假的元素
- 2.6 獲取序列中被洗掉的元素
- 2.7 獲取索引中以索引為基數所對應的元素
- 2.8 判斷是否已經收藏某課程
1. filter() 函式的介紹
1.1 功能
filter() 函式用于 過濾 可迭代物件中不符合條件的元素,回傳由符合條件的元素組成的新的迭代器,filter() 函式把傳入的函式依次作用于每個元素,然后根據回傳值是 True 還是 False,來決定保留或丟棄該元素,
1.2 語法
filter(function or None, iterable) --> filter object
引數說明:
(1) function:用于實作判斷的函式,可以為 None,
(2) iterable:可迭代物件,如串列、range 物件等,
(3) 回傳值:回傳一個迭代器物件,
2. filter() 函式的應用
2.1 filter() 函式的基本應用
使用 filter() 函式過濾出 0~100 (不包括 100) 之間的所有奇數,代碼如下:
def is_odd_number(number): # 定義一個判斷偶數的函式
# 第一種
# if number % 2 != 0:
# return True
# return False
# 第二種
# return True if number % 2 != 0 else False # 簡寫
# 第三種
return number % 2 != 0 # 簡寫
new_list = filter(is_odd_number, range(100)) # 使用filter()函式過濾出序列中的偶數
print(new_list) # 回傳一個迭代器物件
print(list(new_list)) # 使用list()函式將迭代器轉換為串列
程式運行結果如下:

2.2 篩選指定范圍的資料
定義學生串列,對 2020 年高考理科成績進行篩選,獲得成績在 600 分到 700 分之間的學生資訊,代碼如下:
def find(item): # 創建函式
score = int(item[1])
return True if 600 <= score < 700 else False # 判斷條件
list1 = [
("小明", 600), ("小剛", 601), ("小雅", 524),
("小旭", 714), ("小章", 624), ("小白", 635),
("小趙", 480), ("小高", 580), ("小王", 541), ("小琪", 680)
]
new_list = filter(find, list1) # 過濾序列中不符合條件的元素
list2 = list(new_list) # 使用list()函式轉換為串列
print(list2) # 輸出學生串列
print(f"600分以上: {len(list2)} 人")
程式運行結果如下:

2.3 篩選型別不是字符的元素
在一個集合中有一組資料,包括字串、數字等,篩選出型別不是字串的元素,代碼如下:
a = {"AmoXiang", 123, 12.5, -2}
print(set(filter(lambda x: type(x) != str, a))) # {123, 12.5, -2}
2.4 取出字串中的數字并轉換為整型
取出一組注冊資訊中的數字,然后轉換為整數,首先判斷字串是否為數字,然后使用 filter() 函式過濾數字,最后轉換為整型輸出,代碼如下:
a1 = "ISVO20N2WTRJ4T0XXGQ5QWP9Z"
a2 = filter(str.isdigit, a1) # 過濾數字
a3 = list(a2) # 轉換為串列
num = "".join(a3) # 連接串列
print(int(num)) # 轉換為整型輸出,輸出: 2024059
2.5 去除序列中所有值為假的元素
如果將 filter() 函式的第一個引數 function 的值設定為 None,就會默認去除序列中所有值為假的元素,如 None、False、0、’’、()、[] 和 {}等,代碼如下:
L = [1, '', 0, 'C', None, [0, 1, 2], False, 3.14, [], {'c': 1, 3: None}, {}]
f = filter(None, L) # 去除序列中為假的元素
print(list(f)) # [1, 'C', [0, 1, 2], 3.14, {'c': 1, 3: None}]
2.6 獲取序列中被洗掉的元素
filter() 函式的回傳值是一個可迭代物件,利用 for 回圈將回傳資料與原始資料比較,就可以判斷出哪些元素被洗掉了,代碼如下:
L = [1, '', 0, 'C', None, [0, 1, 2], False, 3.14, [], {'c': 1, 3: None}, {}]
f = list(filter(None, L))
print(f)
delete_data = L
for i in f:
if i in L:
delete_data.remove(i)
print(f"被洗掉的元素為: {delete_data}")
2.7 獲取索引中以索引為基數所對應的元素
通過 filter() 和 lambda() 函式輸出串列 list_a 中以索引為基數出現次數最多的元素,代碼如下:
list_a = [12, 213, 22, 2, 2, 2, 22, 2, 2, 32]
li = filter(lambda x: x in list_a, [i for i in range(len(list_a))])
print(list(li)) # [2]
2.8 判斷是否已經收藏某課程
在線課堂專案中,用戶可以收藏喜歡的課程,如果之前已經收藏過該課程,則不用收藏,所以每次收藏之前,需要查詢該課程是否已經收藏,代碼如下:
class Course(object):
"""
課程類
"""
def __init__(self, course_id):
self.course_id = course_id
# 判斷是否已經收藏
def is_favorite(course_id):
# 獲取所有收藏的課程 id
course = list(filter(lambda c: c.course_id == course_id, course_list))
if len(course) > 0:
return True
return
if __name__ == '__main__':
course_list = []
for i in range(1, 10):
# 實體化9個課程類,并傳遞課程id
course_list.append(Course(i))
print(is_favorite(7)) # True
print(is_favorite(10)) # None
感謝您閱讀本篇博文,希望本文能成為您編程路上的領航者,祝您閱讀愉快!

好書不厭讀百回,熟讀課思子自知,而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力,
如果我的博客對你有幫助、如果你喜歡我的博客內容,請點贊、評論、收藏一鍵三連哦!聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看,
?編碼不易,大家的支持就是我堅持下去的動力,點贊后不要忘了關注我哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232469.html
標籤:python
上一篇:網路聊天
