[TOC] >[success] # 列表推导式 ~~~ 1. 列表推导式是通过⼀一⾏行行来构建你要的列列表, 列列表推导式看起来代码 简单. 但是出现错误之 后很难排查. 2.推导式是从一个或者多个迭代器快速简洁地创建数据结构的一种方法。它可以将 循环和条 件判断结合,从而避免语法冗长的代码。 ~~~ >[danger] ##### 案例 ~~~ 1.[最终结果(变量) for 变量 in 可迭代对象] 2.[最终结果 for 变量 in 可迭代对象 if 条件] 3.两层循环 ~~~ * 对应第一个公式案例 ~~~ lst = [i for i in range(1,15)] print(lst) 打印结果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] ~~~ * 对应第二个公式案例 ~~~ lst = [i for i in range(1,101) if i%2==0] print(lst) 打印结果: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100] ~~~ * 第三种超级无敌两层循环 ~~~ rows = range(1, 4) cols = range(1,3) for row in rows: for col in cols: print(row, col) 打印结果: 1 1 1 2 2 1 2 2 3 1 3 2 使用列表推到转换(这种读法先从最右面的循环开始) cells = [(row, col) for row in rows for col in cols] ~~~ >[success] # 字典推导式 ~~~ 1.{ k : v for expression in iterable } ~~~ >[danger] ##### 案例 ~~~ word = 'letters' letter_counts = {letter: word.count(letter) for letter in set(word)} print(letter_counts) 打印结果: {'t': 2, 'r': 1, 'e': 2, 's': 1, 'l': 1} ~~~ >[success] # 集合推导式 ~~~ 1.{expression for expression in iterable } ~~~ >[danger] ##### 案例 ~~~ lst = ["马化腾", "马化腾", "王建忠", "张建忠", "张建忠", "张雪峰", "张雪峰"] s = {i for i in lst} # 集合推倒式 print(s) ~~~ >[success] # 生成器推导式 ~~~ 1.元组是没有推导式的,圆括号之间的是生成器推导式,它返回的是一个生成器对 象 2.一个生成器只能运行一次。列表、集合、字符串和字典都存储在内存中,但 是 生成器仅在运行中产生值,不会被存下来,所以不能重新使用或者备份一 个生成 器。 3.列列表推导式比较耗内存. ⼀一次性加载. ⽣生成器表达式⼏几乎不占⽤用内存. 使⽤用的时候才分 配和使⽤用内存 4. 得到的值不⼀一样. 列列表推导式得到的是⼀一个列列表. ⽣生成器表达式获取 的是⼀一个⽣生成器. ~~~ >[danger] ##### 案例 ~~~ g = (i for i in range(10)) print(list(g)) ~~~