Python - 生成式、lambda 匿名函数

目录

一、三元表达式 - if …… else

二、列表生成式 - [… for … in …]

三、字典生成式 - {…:… … for … in …}

3-1 字典生成式用于集合的生成

四、匿名函数 - lambda

4-1 匿名函数和高级函数

4-1-1 max、min + lambda - 指定函数比较的对象

4-1-2 sorted + lambda - 指定函数的排序依据

4-1-3 map + lambda - 自定义映射规则,返回列表

4-1-4 filter + lambda - 自定义过滤规则,返回列表

4-1-5 reduce + lambda - 自定义合并

五、生成器表达式 - (… for … in …)


一、三元表达式 - if …… else

  • res = 条件成立返回的值 if 条件 else 条件不成立返回的值
  • 例:res='成功' if name == '123' else '失败'

二、列表生成式 - [… for … in …]

[循环取出来的值进行运算  for  循环取出的变量  in  列表名]

[循环取出来满足if判断的值进行运算  for  循环取出的变量  in  列表名  if  判断]

语法:

[
    expression for item1 in iterable1 if condition1
        for item2 in iterable2 if condition2
            ...
                for itemN in iterableN if conditionN
]

'''
类似于
res=[]
for item1 in iterable1:
    if condition1:
        for item2 in iterable2:
            if condition2
                ...
                for itemN in iterableN:
                    if conditionN:
                        res.append(expression)
'''
names = ['a','b','c']
l=[name + '_123' for name in names]
print(l)
# ['a_123','b_123','c_123']

l = ['a', 'b', 'c']
# 取出列表的值和索引
for index in enumerate(l):
    print(index) # (0, 'a')

 

三、字典生成式 -{…:… … for … in …}

keys = ['name','age','sex']
vals = ['a','v','c']

dic = {k:vals[i] for i,k in enumerate(keys) if i >0}
print(dic)

# {i:i for i in range(10)}

3-1 字典生成式用于集合的生成

{i for i in range(10)}
# {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
{i for i in 'hello'}
# {'l', 'e', 'o', 'h'}

 

四、匿名函数 - lambda

lambda x,y,z=1:x+y+z

lambda 参数名们 : 表达式 <-----表达式的结果作为返回值

4-1 匿名函数和高级函数

4-1-1 max、min + lambda - 指定函数比较的对象

salaries={'n1':3000,'n2':100000000,'n3':10000,'n4':2000}

# 注意!!max和min函数对字典的比较是一般情况是key
max(salaries)
min(salaries)

# 通过max函数的key参数,改变max函数的比较依据
# max函数会for循环出一个值,值会被传给key指定的函数,调用key指定的函数,拿到返回值作为依据
# 第一个值是被max循环的对象
a = max(salaries,key=lambda k :salaries[k])
b = min(salaries,key=lambda k :salaries[k])
print(a)
print(b)

4-1-2 sorted + lambda - 指定函数的排序依据

nums = [1,4,25,6,7,99]
print(sorted(nums)) # 默认升序
print(sorted(nums,reverse= True)) # 降序

# 对字典进行排序,key 为指定依赖
res = sorted(salaries,key= lambda name:salaries[name])
print(res)

4-1-3 map + lambda - 自定义映射规则,返回列表

# map :把一个列表按照自定义映射规则映射成一个新的列表
names = ['a', 'b', 'c']
res = map(lambda name: name + '123', names)
print(res)  # 
print(list(res))  # ['a123', 'b123', 'c123']

4-1-4 filter + lambda - 自定义过滤规则,返回列表

# filter :从一个列表中过滤出,符合过滤规则的值形成新的列表
# 相当于for循环取出元素,传给匿名函数,讲调用匿名函数返回值为true的元素留下

names = ['a12', 'b', 'c12', 'd']

res = filter(lambda name: name.endswith('12'), names)
print(res)  # 
print(list(res))  # ['a12', 'c12']

# 同上
res1 = [name for name in names if name.endswith('12')]
print(res1)  # ['a12', 'c12']
print(list(res1))  # ['a12', 'c12']

4-1-5 reduce + lambda - 自定义合并

# reduce :把多个值合并成一个结果
# reduce(lambda 接受后面两个的值进行运算,循环对象的值,合并参数)

from functools import reduce

li = ['a12', 'b', 'c12', 'd']

# 'A'是合并参数,li 进行循环取出列表中的值,两个值给匿名函数作为参数传入
# 最后取出来的是一个合并的字符串
res = reduce(lambda x, y: x + y, li, 'A')
print(res)  # Aa12bc12d

# 进行叠加运算
res = reduce(lambda x, y: x + y, range(1, 101))
print(res)  # 5050

Python - 生成式、lambda 匿名函数_第1张图片

五、生成器表达式 - (… for … in …)

# 使用()生成生成器,用于迭代;注意!!值仅可消费一次!
g = ((i+2) for i in range(2,27))
print(g) #  at 0x00000227BA0EEF10>
print(next(g)) # 4
print(next(g)) # 5

# 可以使用在函数调用中,且省略一对小括号
sum(i ** 2 for i in range(10))

 

你可能感兴趣的:(python)