列表表达式和生成器
-
列表表达式
-
旧列表生成满足条件的新列表
-
语法:
-
- [表达式 for 变量 in 旧列表]
-
-
[表达式 for 变量 in 旧列表 if 条件]
-
ls = ['jordan','alice','tom','jack','bob'] new_ls = [name.capitalize() for name in ls if len(name) > 4] print(new_ls) # ['Jordan', 'Alice']
-
ls = [i for i in range(101) if i % 3 == 0] print(ls) # 这两者结果一致 def fn(ls): new_ls = [] for i in ls: if i % 3 == 0: new_ls.append(i) return new_ls ls = range(101) print(fn(ls))
-
-
-
-
-
生成器 generator
-
在Pyhton中有一边循环一边计算的机制,称之为生成器
-
如何创建生成器
-
1 通过列表表达式
-
ls = [x * 3 for x in range(10)] print(type(ls),ls) # <class 'list'> [0, 3, 6, 9, 12, 15, 18, 21, 24, 27] new_ls = (x * 3 for x in range(10)) print(type(new_ls),new_ls) # <class 'generator'> <generator object <genexpr> at 0x1094fa270> # 方式一 __next__ 获得元素 print(new_ls.__next__()) # 0 print(new_ls.__next__()) # 3 print(new_ls.__next__()) # 6 # 方式二 next() print(next(new_ls)) # 9 print(next(new_ls)) # 12 print(next(new_ls)) # 15
-
-
2 通过函数来完成,关键字yield
-
def fn(): n = 0 while True: n += 1 yield n # 相当于return n + 暂停 n = fn() print(n) # <generator object fn at 0x10ef77270> print(next(n)) # 1 print(next(n)) # 2 print(n.__next__()) # 3
-
-
-