python-內建函式(搭配lambda使用)
阿新 • • 發佈:2021-11-19
和lambda一起使用的內建函式都在這裡,列舉,對映·····看這一篇就get了,超級詳細,比牙籤還細!!!!!
目錄
常用的內建函式
學習!
需要注意的知識點:
大部分內建函式經常搭配lambda函式使用
可迭代物件:字串、列表、元組、字典、集合、檔案物件
注意!!!!
在py3中部分函式的返回值是一個迭代器,不能多次遍歷,(map、filter、zip、range)
在py2中部分函式的返回值是一個列表/元組/字串/列表套元組,可多次遍歷
enumerate()函式
- enumerate()函式是列舉的意思
- 格式:enumerate(argument,start = 0)
- argument可以是迭代器或可迭代物件(列表/字串/元組···)
- start是預設返回的索引值,預設從0開始,可以修改
- 通常和for迴圈一起使用,可以獲取遍歷物件的索引和值,一一對應
例項如下:
# 1、搭配字串使用 str1 = 'python' for index,value in enumerate(str1): print(f'{index}:{value}') # 結果 0:p 1:y 2:t 3:h 4:o 5:n # 2、搭配列表(元組一樣)一起使用 l = ['Hammer','jason','tony'] for a,b in enumerate(l): print(f'{a},{b}') # 結果 0,Hammer 1,jason 2,tony #3、搭配集合使用 s = {"aline","Hammer",18,'199****1234'} for index,value in enumerate(s): print(f'{index},{value}') # 結果 0,Hammer 1,aline 2,18 3,199****1234 # 4、搭配字典使用 dic = {'name':'hammer','age':18,'number':'199***1234'} for index,value in enumerate(dic): # 這樣是直接輸出了字典的鍵 print(f'{index}:{value}') # 結果 0:name 1:age 2:number for index, value in enumerate(dic): # 輸出字典的值 print(f'{index}:{dic[value]}') # 結果 0:hammer 1:18 2:199***1234
- 注意列舉對字典和集合使用,可能索引的位置不能按順序對應字典和集合的值,因為字典和集合的無序性所導致!
例項如下:
# 集合舉例
s={'one','two','three','four'}
for index,value in enumerate(s):
print(f'{index}:{value}')
# 結果,1和one沒有對應,因為集合的無序性
1:three
2:four
3:two
4:one
- 圖示如下:
- 預設的輸出的起始位置為0,可以修改預設起始位置
- eg:start = 0 >>>> start = 1 / 直接寫1
例項如下:
lst = ['HammerZe','jason','tony']
# 起始位置預設為0
for index,value in enumerate(lst):
print(f'{index}:{value}')
#修改預設位置為1,寫start = 1 / 直接寫1
for index,value in enumerate(lst,start=1):
print(f'{index}:{value}')
# 結果,寫一塊了
0:HammerZe
1:jason
2:tony
1:HammerZe
2:jason
3:tony
map()函式
- map()函式的意思是對映,根據提供的函式對指定的序列做對映處理
- 格式:map(function,iterable) # iterable:可迭代物件
- 第一個引數為函式名,第二個引數為可迭代物件
- 過程:迴圈遍歷可迭代物件中的每一個元素傳遞給function函式,儲存返回值,返回一個新的可迭代物件,並沒有修改原理的可迭代物件。
例項如下:
# map函式的使用,搭配lambda函式使用
'''案例1''':
# 定義一個可迭代物件
lst = [1,2,3,4,5]
# 用res接收map函式的返回值,轉換成列表
# lambda函式作用:給lst列表中每一個元素加2
res = list(map(lambda x:x+2,lst))
print(res)
# 結果
[3, 4, 5, 6, 7]
'''案例2'''
# 面試題(提示:使用了map函式、lambda函式、列表解析)
# 一行程式碼實現,求10以內的偶數的平方和
print(sum(map(lambda x: x ** 2, [x for x in range(1, 10) if x % 2 == 0])))
#分步實現
# 1、遍歷出1到10以內的偶數
even_num = [x for x in range(1,10) if x % 2 ==0] #[2, 4, 6, 8]
# 2、對每一個元素求平方用到對映和lambda計算公式
# print(even_num)
square_num = map(lambda x:x**2,even_num) # [4, 16, 36, 64]
#print(list(square_num))
# 3、最後求和
print(sum(square_num))
# 兩個結果
120
zip()函式
- zip()函式是從一個或多個迭代器獲取元素,組合成一個新的迭代器,以列表套元組的形式返回。
- 如果zip()函式中傳入的迭代物件長度不等,以長度最短的迭代器為基準。
- 實在不理解可以把函式看作“拉鍊”,一條拉鍊是一般長的,或者想一下短板效應
- 格式:
- zip(iterable1,iterable2···iterablen)
- iterable為可迭代物件
例項如下:
l = [1,2,3,4]
# zip()函式傳入一個引數
get_return = list(zip(l))
print(get_return)
# zip()函式傳入兩個等長的引數(列表和元組)
# 只要是可迭代物件不同型別也可以
l1 = [1,2,3,4]
l2 = ('HammerZe',18,'male','study')
get_return = list(zip(l1,l2))
print(get_return)
# zip()函式傳入多個不等長的引數
l1 = [1,2,3,4]
l2 = ['HammerZe',18,'male','study']
l3 = ['name','age','gender','hobby','number','height']
get_return = list(zip(l1,l2,l3))
print(get_return) # l3的元素只輸出了4個,以最短的列表為參考
# 三個示例結果:
[(1,), (2,), (3,), (4,)]
[(1, 'HammerZe'), (2, 18), (3, 'male'), (4, 'study')]
[(1, 'HammerZe', 'name'), (2, 18, 'age'), (3, 'male', 'gender'), (4, 'study', 'hobby')]
filter()函式
- filter()函式用於過濾可迭代物件中的元素,過濾掉不符合條件的元素,返回符合條件的元素組織成新的列表。
- 格式:
- filter(function , iterable)
- function為函式名,iterable為可迭代物件
例項如下:
# 輸出1-10以內的奇數
l = [1,2,3,4,5,6,7,8,9,10]
res = filter(lambda x:x%2==1,l)
print(list(res))
#結果
[1, 3, 5, 7, 9]
reduce()函式
注意:在python 3.0.0.0以後, reduce已經不在built-in function裡了, 需要from functools import reduce.
- reduce()函式的意思是累計操作
- 格式:
- reduce(function,sequence [ ,initial] )
- function為函式名,function中必須是兩個引數,sequence為序列,initial有指定的值相當於追加使用資料,或當sequence為空,作為返回值。
例項如下:
# 實現列表元素的累加
from functools import reduce
l = [1,2,3,4,5]
res = reduce(lambda x,y:x+y,l)
print(res)
# 結果
15
# 用列表解析+reduce實現
res = reduce(lambda x,y:x+y ,[x for x in range(1,6)])
print(res)
# 結果
15
#實現6的階乘
res = reduce(lambda x,y:x*y ,[x for x in range(1,6)])
print(res)
sum()函式
- sum函式是對序列裡的資料進行加法操作,區別reduce函式
- 格式:
- sum(sequence,[,start ] )
- sum函式是對sequence裡的資料進行加法操作,start預設為0,如果寫入資料作為sequence的第一個資料傳入
例項如下:
# sum對列表求和
lst = [1,2,3,4]
print(sum(lst))
# 結果>>>>10
# 修改sum的預設值為1,作為列表的第一個元素傳入
print(sum(lst,1))
# 結果>>>>11
max()/ min()函式
-
max()和 min()函式就是求最大最小
-
格式:
- max(*args, key=None)
- min(*args, key=None)
- 引數key用來指定一個函式,此函式的功能就是制定排序的規則,一般用lambda函式
例項如下:
# 常規用法 print(min(1, 2, 3, 4)) print(max(1, 2, 3, 4)) # 搭配lambda使用,比較字元大小用的是ASCII dic = {1:'a',2:'b',3:'c'} # 比較v的大小返回v res = max(dic,key=lambda x:dic[x]) print(dic[res]) #結果 1 4 c
sort()函式
- sort()函式應用到列表上,屬於列表的內建方法,沒有返回值,是對原列表進行排序操作
- 格式:
- sort( key=None, reverse=False)
- key為需要排序的物件,reverse預設為False,升序,改為True為降序
例項如下:
l = [1,5,6,9,7]
l.sort()
print(l)
# 結果
[1, 5, 6, 7, 9]
sorted()函式
- sorted()函式可以對所有可迭代物件進行排序操作
- 格式:
- sorted(iterable,key = None ,reverse = False)
- iterable:可迭代物件
- 引數key用來指定一個函式,此函式的功能就是制定排序的規則,一般用lambda函式。
- reverse = False為升序,=True為降序,預設升序。
- 返回一個可迭代物件(列表)
例項如下:
#搭配列表使用
l = [11,22,44,33,55]
res = sorted([i for i in l if i>30])
print(res,type(res))
# 結果
[33, 44, 55] <class 'list'>
# 搭配字典使用
dic = {1:"hammer",2:"jason",3:"tony"}
# 按key排序
print(sorted(dic))
print(sorted(dic.keys()))
# 按value排序,對比的是ASCII碼
print(sorted(dic.values()))
#結果
[1, 2, 3]
[1, 2, 3]
['hammer', 'jason', 'tony']
# 搭配lambda使用
# 按照工資多少排序升序排列
lst = [{'salary':18000,'age':18,'name':'hammer'},
{'salary':10000,'age':28,'name':'jason'},
{'salary':20000,'age':38,'name':'tony'}]
print(sorted(lst, key=lambda x: x['salary']))
# 結果
[{'salary': 10000, 'age': 28, 'name': 'jason'},
{'salary': 18000, 'age': 18, 'name': 'hammer'},
{'salary': 20000, 'age': 38, 'name': 'tony'}]
!!!!!持續更新中,碼字總結不易點個贊叭~!!!!!