map函数
语法
map(function, iterable, ...)
参数
- function -- 函数,有两个参数
- iterable -- 一个或多个序列
返回值
Python 2.x 返回列表。
Python 3.x 返回迭代器。
def square(x) : # 计算平方
return x ** 2 map(square, [1,2,3,4,5]) # 计算列表各个元素的平方 # 使用lambda表达式
map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数 map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
lambda
使用lambda表达式实现三目运算符
# 要实现的效果
if 0 == 0:
name = "timo"
else:
name = "nana" # lambda实现 如果if条件成立,name等于if前面的值,否则等于后面的
name = "timo" if 0 == 0 "nana"
使用lambda表达式实现简单的函数
# 要实现的效果
def func(arg):
return arg + 1 # 执行
func(123) # 使用lambda表达式实现 lambda后面紧跟着的是函数的参数,冒号后面跟着的是返回值
lambda_func = lambda arg: arg + 1 # 执行
lambda_func(123)
快捷生成想要的列表
生成一个步长为5的列表
arr = [x*5 for x in range(5)]
# 得到结果
arr = [0, 5, 10, 15, 20]
结合lambda表达式生成列表
# 第一种情况
f0, f1, f2 = [lambda m: m*i for i in range(3)] f0(1) == f1(1) == f2(1) == 2 # 第二种情况 f = [lambda m: m*i for i in range(3)] for l in f:
l(1), # 结果 2 2 2 # 第三种情况 f = (lambda m: m*i for i in range(3)) for l in f:
l(1), # 结果 0 1 2 # 第四种情况 f0, f1, f2 = (lambda m: m*i for i in range(3)) f0(1) == f1(1) == f2(1) == 2
关于上面四种情况出现不同结果的原因
第三种情况不是元组,而是返回一个生成器,在调用 l(1) 的时候,是在生成器执行过程之中,所以函数 l 中的 i 变量随着生成器的迭代在变化,所以最终结果会有变化。
而第四种情况一下把生成器迭代完了,和第一第二种类似,都是所有代码都执行完了,i 都处于最后一个值 2, 所以值没有变化.
filter内置函数
描述
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法
filter(function, iterable)
参数
- function -- 判断函数。
- iterable -- 可迭代对象。
返回值
返回列表。
实例
def fun(s):
if s != 'a':
return s
str = ['a', 'b', 'c']
res = filter(fun, str1) #过滤到字符a print(res) #返回一个可迭代对象