1、列表推导式:
[变量(加工后的变量) for 变量 in iterable] 循环模式
[变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式
1 # 生成列表[1,2,3,,,10] 2 lst1 = [i for i in range(1,11)] 3 print(lst1) 4 # 生成列表[python1期,python2期,,,python13期] 5 lst2 = ["python%s期" % i for i in range(1,14)] 6 print(lst2) 7 # 生成30以内可以被3整除的数的列表 8 lst3 = [i for i in range(1,31) if i % 3 == 0] 9 print(lst3)
列表表达式的高级一点的应用:
1 names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], 2 ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] 3 l4 = [name for i in names for name in i if name.count('e') == 2] 4 l5 = [] 5 for i in names: 6 for name in i: 7 if name.count('e') == 2: 8 l5.append(name) 9 print(l4) 10 print(l5)
优点:
1、节省代码
2、看着高大上
缺点:
1、不好排错
整体:
凡是用列表推导式构造的列表对象,用其他方式都可构建,非常复杂的列表推导式是构建不出来的。
列表推导式比较有魔性,但是不能用列表推导式写出来的代码就不要勉强了。
2、生成器表达式:
1 # 生成期(python1期,python2期,,,python13期]) 2 g_obj = ("python%s期" % i for i in range(1,14)) 3 print(g_obj)
1、一种是用生成器函数yield
2、一种是生成器表达式,与列表表达式想类似,不过外面用的是()
为什么有生成器:
生成器本身是自己用python代码构建的,这样就满足了个性化需求,满足以后你工作中的需要。