python3学习笔记(7)_listComprehensions-列表生成式
1 #python3 学习笔记17/07/11 2 # !/usr/bin/env python3 3 # -*- conding:utf-8 -*- 4 5 #通过列表生成式可以生成格式各样的list,这种list 一般是容量小的list 6 #导入os模块,模块的概念后面讲到 7 import os 8 #生成[1,2,3,4,5,6,7,8,9,10] 9 l1 = list(range(1,11)) 10 print("1-10",l1) 11 12 # 生成[1*1, 2*2,...10*10] 13 l2 = [] 14 for x in range(1, 11): 15 l2.append(x * x) 16 print("平方",l2) 17 18 #比用for循环更简洁的方法,用生成式 19 print("平方",[x * x for x in range(1,11)]) 20 21 #for 循环后面可以加上if 判断,这样我们就可以筛选出 仅奇数 或 偶数的平方 22 print("偶数平方",[x * x for x in range(1, 11) if x % 2 == 0]) 23 print("奇数平方",[x * x for x in range(1, 11) if x % 2 != 0]) 24 25 #使用 两层循环,生成全排列 26 print([m+n for m in 'ABC' for n in 'XYZ']) 27 28 #列出当前文件所在目录下的文件和目录 29 print([d for d in os.listdir('.')]) 30 31 #列表生成式 可以使用两个变量来生成list 32 d1 = {'x':'A', 'y':'B', 'z':'C'} 33 print([k + '=' + v for k, v in d1.items()]) 34 35 #用列表生成式 把一个list中的所有字符串变成小写 36 L = ["Hello", "World"] 37 print("lower case ", [s.lower() for s in L]) 38 39 #列表生成器,列表生成式 用[],而列表生成器用(),列表生成器会在生成列表的时候自动计算后续的元素,而不会像生成式子一样一次生成所有元素,从而节省空间 40 L1 = [x *x for x in range(10)] 41 print(L1) 42 43 #列表生成器 44 g = (x * x for x in range(10)) 45 #用next() 函数获取下一个生成的元素 46 for n in g: 47 print(n) 48 49 #用普通函数 打印斐波那契数列 50 def fib(max): 51 n, a, b = 0, 0, 1 52 while n < max: 53 print(n, b) 54 a, b = b, a + b 55 n = n + 1 56 return 'done' 57 58 fib(6) 59 60 #将 print(b) 换成 yield b 这个函数就变成了生成器 61 def fibg(max): 62 n, a, b = 0, 0, 1 63 while n < max: 64 yield b 65 a, b = b , a + b 66 n = n + 1 67 return 'done' 68 69 #把函数改成 generator后,我们一般不用next()函数来取下一个返回值,而直接使用for循环来迭代 70 for n in fibg(6): 71 print(n) 72 #generator 拿不到return语句的返回值,如果要拿到返回值,必须捕获stopIteration 73 g = fibg(6) 74 while True: 75 try: 76 x = next(g) 77 print("g: ",x) 78 except StopIteration as e: 79 print('Generator return value:', e.value) 80 break 81 else: 82 pass 83 finally: 84 pass