列表推导式
把需要用一个函数写成的小功能,利用一行表达式完成
例子:
1 l = [1,2,3,4,5] 2 # 所有的偶数都放到新的列表中 3 # 正常函数 4 def Lst(): 5 li = [] 6 for i in l: 7 if i%2 == 0: 8 li.append(i) 9 return li 10 11 li = Lst() 12 print(li) 13 14 # 列表推导式 15 ls = [i for i in l if i%2 == 0] 16 print(ls)
练手题:
1 # 30以内所有能被3整除的数 2 ls1 = [i for i in range(31) if i%3 == 0] 3 print(ls1) 4 # 30以内所有能被3整除的数的平方 5 ls2 = [i**2 for i in range(31) if i%3 == 0] 6 print(ls2) 7 # 找到嵌套列表中名字含有两个'e'的所有名字 8 names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley'],['Alice']] 9 ls = [name for lst in names for name in lst if name.count('e') == 2] 10 print(ls)
生成器表达式:
与列表表达式写法一致,不同在于列表表达式中的 [ ] 换成了()
生成器取值的方式
1.gen.__next__
2.for n in gen:pass
3.list(gen)
思考:
题:
1 def add(n,i): 2 return n+i 3 4 def test(): 5 for i in range(4): 6 yield i 7 8 g=test() 9 for n in [1,10]: 10 g=(add(n,i) for i in g) 11 12 print(list(g))
=============================
lambda 函数写法
【lambda 参数 :具体函数】
例子:
a = lambda a,b : a if a>b else b
b = lambda a : '偶' if a%2==0 else '奇'
c = lambda a : abs(a)
print(a(3,2))
print(b(2))
print(c(-5))