python基础 ---lambda函数和常用内建函数

lambda函数

(1)lambda函数也叫匿名函数,单行函数,也叫lambda表达式
(2)匿名函数就是没有名字的函数,没有def function_name()这个格式的定义

常规函数向lambda函数的转换

#常规函数
def add(x, y):
	return x + y

#lambda函数	
lambda x,y: x+y

再举个栗子

#常规函数
def list_init():
	L1 = []
	for i in range(10):
		L1.append(i)
	
#lambda函数
L1 = ((lambda *args: [x for x in args])(*range(10))) #列表生成

lambda函数的应用范围很广,排序,对象生成,过滤等函数都会用到lambda函数

#容器生成
(lambda *args: (x for x in args))(*range(10)) #生成器
(lambda *args: [x+1 for x in args])(*range(10)) #生成列表
(lambda *args: {str(x): x+1 for x in args})(*range(10)) #生成字典
(lambda *args: [(x,x+1) for x in args])(*range(10)) #只包含元组的列表,注意元组要加上小括号
(lambda *args: {x%2 for x in args})(range(16))  #只包含偶数的集合

排序sorted

sorted(iterable, *, key=None, reverse=False) --> list #会生成新的列表
#对于列表排序,直接调用sorted函数即可
L1 = [1,3,-12,9,34,2,5]
sorted(L1, reverse=False) #会返回排序后的列表

L3.sort(reverse=False) #会排序L3,但是无返回,或者说是返回None

#字典排序,默认按照字典的key排序
d1 = {1:'aaa', 2:(1,2), 5:['haoba'], -3:2}
sorted(d1, key=None, reverse=False) #不会返回排序后的key的列表

过滤filter

filter(function, iterable)
对可迭代对象进行遍历,返回一个迭代器
function参数是一个参数函数,且返回值应当是bool类型,或其返回值等效布尔值。
function参数如果是None,可迭代对象的每一个元素自身等效布尔值
print(list(filter(lambda x: x%3==0, [1,9,55,150,-3,78,28,123]))) #只有x%3 == 0的才输出,其他的都被过滤
print(list(filter(lambda x:x%3, [1,9,55,150,-3,78,28,123]))) #注意与上面的区别,这个是过滤掉能被3整除的数值
print(list(filter(None, range(5)))) #默认情况下,值为布尔假的元素都会被过滤掉
print(list(filter(None, range(-5, 5)))) #同上
[9, 150, -3, 78, 123]
[1, 2, 3, 4]
[-5, -4, -3, -2, -1, 1, 2, 3, 4]

映射map

定义 map(function, *iterables) -> map object
对多个可迭代对象的元素,按照指定的函数进行映射
返回一个迭代器
print(list(map(lambda x: 2*x+1, range(10)))) #注意lambda表达式
print(dict(map(lambda x: (x%5, x), range(500))))
print(dict(map(lambda x,y: (x,y), 'abcde', range(10)))) #两个可迭代对象分别映射至lambda表达式的x和y变量
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
{0: 495, 1: 496, 2: 497, 3: 498, 4: 499}
{'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

拉链函数zip

zip(*iterables) 
像拉链一样,把多个可迭代对象合并在一起,返回一个迭代器
将每次从不同对象中取到的元素合并成一个元组
print(tuple(zip(range(5),range(5),range(5))))
print(list(zip(range(5),range(5),range(5))))
print(tuple(zip(range(5), range(3), range(5))))
((0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4)) #元组和列表的差别
[(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4)]
((0, 0, 0), (1, 1, 1), (2, 2, 2)) #zip函数具有木桶原则,根据元素少的来组合

print(dict(zip(range(10),range(10))))
print(dict(zip(range(5), range(3)))) #同样具有木桶原则
print({str(x):y for x,y in zip(range(10),range(10))})
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
{0: 0, 1: 1, 2: 2}
{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

lambda函数配合其他函数

print(dict(map(lambda x: (chr(65+x), 10-x), range(5))))  #  高阶函数,构建字典
d = dict(map(lambda x: (chr(65+x), 10-x), range(5)))     # 高阶函数
sorted(d.items(), key=lambda x:x[1])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章