python lambda表达式的使用方法(匿名函数)

文章目录

        • lambda函数简介
        • 示例1:将存有文件名的字符串列表,运用正则表达式方法提取文件名中的数字,按照数字大小将文件名字符串列表重新排序
        • 示例2:将存有hsv颜色空间的颜色元组列表,转换成rgb颜色空间的颜色元组列表
        • 示例3:将存有两个数字的元组列表,运用lambda表达式分别计算输出其中两个数字的和

lambda函数简介

lambda表达式,被称为匿名函数,如:lambda x, y : x+y,冒号前的x、y是所需参数,冒号后的x+y是所要运行的表达式,返回值就是计算后的结果,如:(lambda x, y : x+y)(1, 2),结果为3。

示例1:将存有文件名的字符串列表,运用正则表达式方法提取文件名中的数字,按照数字大小将文件名字符串列表重新排序

参见:如何将yolo的标注(annotations).txt 坐标转换成tensorflow-yolov3(YunYang1994)的.txt 标注坐标?

# (3)用lambda配合正则表达式(将filenames中对象一一取出赋给x,通过冒号后的表达式运算后将结果返回给key)
# 数字字符串排序貌似还是以字符顺序而不是数字大小来排的,
# 可能要先转化为数字(而re.findall('\((.*?)\)', x)返回的是字符串列表,要把它转换成数字列表)
filenames.sort(key=lambda x: list(map(eval, re.findall('\((.*?)\)', x))))

lambda表达式的使用方法

示例2:将存有hsv颜色空间的颜色元组列表,转换成rgb颜色空间的颜色元组列表

import colorsys
hsv_tuples=[(0.0, 1.0, 1.0),(0.5,0.5,0.5)]
print(list(map(lambda x:colorsys.hsv_to_rgb(*x),hsv_tuples)))	
结果:
[(1.0, 0.0, 0.0), (0.25, 0.5, 0.5)]
参数前带个*表示元组,
里是因为colorsys.hsv_to_rgb函数所需传入对象必须是元组,map函数则要求hsv_tuples为可迭代对象

示例3:将存有两个数字的元组列表,运用lambda表达式分别计算输出其中两个数字的和

tuples=[(1,2),(3,4)]
print(list(map(lambda x:((lambda a,b:a+b)(*x)),tuples)))
结果:
[3, 7]
这里使用了两次嵌套的lambda表达式,其中借鉴了lambda表达式的用法之一:
add = lambda x, y : x+y
add(1,2)  # 结果为3

当然,用下面这种方法也是可以的:

tuples=[(1,2),(3,4)]
print(list(map(lambda x:x[0]+x[1],tuples)))		# [3, 7]

参考文章:python – lambda表达式

你可能感兴趣的:(深入浅出,python机器学习,Python)