净心诀---python3生成器进阶

列表推导式

把需要用一个函数写成的小功能,利用一行表达式完成

例子:

 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))

猜你喜欢

转载自www.cnblogs.com/zakker/p/12056114.html