三元表达式
res = 条件成立返回的值 if 条件 else 条件不成立返回的值
例:res='成功' if name == '123' else '失败'
列表生成式
[循环取出来的值进行运算 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 i in enumerate(1):
print(i)
列表的解压缩
for i,v in enumerate(1):
print(i,v)
字典生成式
例如:
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)}
字典生成式用于集合的生成
{i for i in range(10)}
{i for i in 'hello'}
匿名函数:没有名字的函数,用于仅临时使用一次的场景
-
lambda x,y,z=1:x+y+z
-
lambda 参数名们 : 表达式 <-----表达式的结果作为返回值
匿名函数与其他函数进行配合使用(max,min,sorted,map,filter,reduce)
salaries={'egon':3000,'alex':100000000,'wupeiqi':10000,'yuanhao':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)
sorted() 进行排序
nums = [1,4,25,6,7,99]
print(sorted(nums))
print(sorted(nums,reverse= True))
对字典进行排序
res = sorted(salaries,key= lambda name:salaries[name])
print(res)
map :把一个列表按照自定义映射规则映射成一个新的列表
names = ['a','b','c']
res = map(lambda name : name+'123',names)
print(res)
print(list(res))
filter :从一个列表中过滤出,符合过滤规则的值形成新的列表
相当于for循环取出元素,传给匿名函数,讲调用匿名函数返回值为true的元素留下
names = ['a12','b','c12','d']
res = filter(lambda name : name.endswith('12'),names)
print(res)
print(list(res))
res1 = [name for name in names if name.endswith('12')]
print(res1)
print(list(res1))
reduce :把多个值合并成一个结果
from functools import reduce
l=['a12','b','c12','d']
res = reduce(lambda x,y:x+y,l,'A')
# # 'A'是合并参数,l进行循环取出列表中的值,两个值给匿名函数作为参数传入
# # 最后取出来的是一个合并的字符串
print(res)
res = reduce(lambda x,y:x+y,range(1,101))
进行叠加运算
print(res)
生成器表达式(生成器推导)
使用()生成生成器,用于迭代
g=((i+2) ** for i in range(2,27))
next(g)
可以使用在函数调用中,且省略一对小括号
sum(i ** 2 for i in range(10))