资讯详情

Python教程 - 生成式

📅 2026/10/28 10:11:29 | 华诺云谱 👁 阅读
Python教程 - 生成式
生成式这是一种语法结构, 它属于一种特定的存在形态, 它可以被应用到那些可以被迭代的对象身上, 使用者能够通过仅仅书写一行代码这样简单的方式, 把原本需要耗费多行代码才能完成的任务给轻松搞定, 这样一来就能够非常明显地提升所写代码在简洁程度以及可读性这些方面的好坏水平。接下来本文将会为大家一一介绍列表生成式到底是什么、字典生成式又是怎么回事, 此外还会谈谈集合生成式, 这里需要特别强调的是元组本身是没有生成式的这一说法存在的, 但是呢人们完全可以使用类似于生成式的那种方式去达成创建元组的最终目标这一点。列表生成式列表生成式是能够使用一行代码来达成快速生成了一个列表这种目的的这种方式, 它的具体的语法形态, 可以表示如下:result [expression for item in iterable]比如说, 如果你想要弄出一个从1数到9的这几个数字各自的平方所构成的那个列表的话, 那么除了在代码里用那种传统的for循环配合着列表的方式去做以外呢, 也是可以用列表生成式这种方法来把这个事情完成的。j*j for j in range(1,10)它会一个一个地把数字从 1 开始, 一直取到 9, 然后把取出来的这些数字交给前面的那个 j, 最后再通过计算 j 乘以 j 的方式, 把最终的结果给弄出来。# 传统写法a []for i in range(1, 10):a.append(i*i)print(a) # [1, 4, 9, 16, 25, 36, 49, 64, 81]# 使用列表生成式b [j*j for j in range(1,10)]print(b) # [1, 4, 9, 16, 25, 36, 49, 64, 81]我们再来看一看另外一个实例情况, 这里假设存在一个名为a的列表对象, 当前的任务是去构建出一个全新的列表b, 在这个新的列表b里面, 它的每一个位置上的元素数值, 都等于原先列表a当中那个最大的数值和其他所有元素的数值进行相减后得到的差值结果, 如果我们采用了列表生成式的方式来进行编码处理的话, 那么整个程序代码的结构形态就会变得极其简练了。# 传统写法a [10,20,30,40,50,60,70,80,90]b []for i in a:b.append(max(a) - i) # 用 a 的最大值减去每个项目print(b) # [80, 70, 60, 50, 40, 30, 20, 10, 0]# 使用列表生成式a [10,20,30,40,50,60,70,80,90]b [max(a)-i for i in a]print(b) # [80, 70, 60, 50, 40, 30, 20, 10, 0]当需要借助两层 for 循环来实现列表的生成时, 用户此时同样可以使用列表生成式来进行相应的操作。# 传统写法# 将两层 for 循环的 i 和 j 加在一起变成新列表的项目a []for i in abc:for j in range(1,4):a.append(i str(j))print(a) # [a1, a2, a3, b1, b2, b3, c1, c2, c3]# 使用列表生成式# 两个 for 循环分别产生 i 和 ja [i str(j) for i in abc for j in range(1, 4)]print(a) # [a1, a2, a3, b1, b2, b3, c1, c2, c3]另外, 列表生成式也可以结合到那个内置函数去用, 这样的话, 就能对生成的那些元素做一些处理, 在下面这个代码里面, 是借助了一行列表生成式这样的一种写法, 就拿到了从二维数组之中取出来的最小值。# 传统写法a [[100, 200, 300, 400, 500], [100, 200, 500, 2, 1]]b []for i in a:b.append(min(i)) # 将二维列表中每个列表里的最小值取出变成新的列表print(min(b)) # 1印出新的列表里的最小值# 使用列表生成式a [[100, 200, 300, 400, 500], [100, 200, 500, 2, 1]]print(min([min(i) for i in a])) # 1列表生成式搭配 if那个列表生成式啊, 它不光是可以借着for循环这个法子, 挺快地就把一个列表给整出来, 它还能跟那个IF判断式给拴在一块儿了, 然后很快就能做筛选, 再把对应的内容一并给弄出来。再往下瞧瞧下面的那段代码, 它是通过列表生成式这么一搞的, 把那个IF给搁到了后头, 这模样儿一摆开, 嘿, 直接就生成了一个偶数的列表了。# 传统写法a []for i in range(1,10):if i%2 0:a.append(i) # 取出偶数放入变量 aprint(a) # [2, 4, 6, 8]# 使用列表生成式a [i for i in range(1, 10) if i%2 0]print(a) # [2, 4, 6, 8]如果将 if 放在 for 的前面则必须加上 else下面的例子会将偶数的元素保留奇数元素替换成 100。a []for i in range(1,10):if i%2 0:a.append(i) # 取出偶数放入变量 aelse:a.append(100) # 如果是奇数将 100 放入变量 aprint(a) # [100, 2, 100, 4, 100, 6, 100, 8, 100]a [i if i%20 else 100 for i in range(1, 10)]print(a) # [100, 2, 100, 4, 100, 6, 100, 8, 100]字典生成式字典生成式可以通过一行代码, 快速得到一个字典, 它的写法和用法是这样的:result {key: value for item in iterable}下面的例子会创建一个字典, 这个字典的 key 是迭代元素, value 是迭代之后的那些被拿出来的每一个元素的数值进行平方之后计算所得的结果。# 传统写法a {}for i in range(1,10):a[i] i*i # 将 i*i 对应指定的键print(a) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}# 使用字典生成式a {i:i*i for i in range(1,10)}print(a) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}集合生成式集合生成式能够通过一行代码进行集合的迅速构造, 其使用的具体语法情况, 如下面所示:result {value for item in iterable}通过这个例子能够看清楚, 怎么去做建立集合的这个动作, 也就是去迭代元素并且把它们的平方值放进去。a set()for i in range(1,10):a.add(i*i) # 将 i*i 添加到集合里print(a) # {64, 1, 4, 36, 9, 16, 49, 81, 25}a {i*i for i in range(1,10)}print(a) # {64, 1, 4, 36, 9, 16, 49, 81, 25}生成一个元组, 这个元组是通过类似数组的生成式的方式构建出来的。元组它没有那种生成式的语法, 不过它也存在一个类似的方式, 可以用来把元组给生成出来, 它的这一种语法结构是:variable tuple(value for item in iterable)a tuple(i for i in range(10))print(a) # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)我们同样可以通过使用表达式的形式, 以及加入 if 这种判断式的逻辑结构, 来生成对应的元组数据结构。a tuple(i*i for i in range(10) if i5)print(a) # (36, 49, 64, 81)
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑