首页 > 编程语言 >Python趣味入门10:推倒繁琐化烦为简的推导式

Python趣味入门10:推倒繁琐化烦为简的推导式

时间:2023-12-29 17:22:06浏览次数:34  
标签:10 化烦 推导 Python 生成器 range print

前言

《西部世界》的德洛丽丝进入了MAZE迷宫,假设她需要列出一系列的平方数作为密码,来进入迷宫。在以往的代码生成类似的数列需要使用循环语句,写多行语句。Python有了推导式,只需要1句就足够了,下面介绍本篇的主角。

本篇的主角是推导式comprehensions(又称解析式),是Python的大杀器之一。推导式是可以从某组数据序列构建另一个组的数据序列的方式。 Python的每一种集合形式的数据结构,都对应有推导式,总共有3种形式:

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式

1、推导式的形式

下面推导式可以形成0至9当中偶数的平方数,即:[0,4,16,36,64],其中红色的部分是每一个推导式必须不变的。

① 与结尾是成对的中括号[]表式 这是一个生成列表的推导式,我们可以使用{}来表示 字典和集合。当然如果是字典,②的部分就必须要有冒号:。

② 集合中元素的表达式。当前表达式表示生成的列表中的元素是变量的平方数,这部分的变量名称必须在④部分出现。

③⑤ 红色部分,for…in…表示循环,这是推导式必须的。③是定义的变量名称,表示in后④的每一个元素。

④定义变量,表示⑥集合中的每一个元素。

⑥现成的集合变量,或是现有的集合元素。

⑦筛选条件:可以省略不写,如上式条件为x%2==0,即意味着只有当x满足偶数的情况下才会加入②部分的表达式运算并把结果加入集合 ,如果x不满足这个条件那么就跳过。我们在终端命令行中,输入上述表达式,看看:

>>> [   x**2  for    x    in   range(10)   if x%2==0]
[0, 4, 16, 36, 64]
>>> 

2、生成器()

我们把最外的括号换成圆括号,就可以形成生成器generator,生成器不会立即计算结果,只在需要的时候生成结果,有利于优化运算节省内存。

如下的代码可以计算半径1-10的圆面积,每一个元素包括一个关键字为关径,值为面积的字典类型,如果使用生成器我们就要使用另一个for...in语句来调用它。

 

1 #生成器示例
2 gen = ({x:x**2* 3.14159} for x in range(1,10))
3 print(gen) #看看是不是有结果
4 for g in gen:
5     print(g)

 

运行的结果如下所示:

<generator object <genexpr> at 0x10e0c4200>
{1: 3.14159}
{2: 12.56636}
{3: 28.27431}
{4: 50.26544}
{5: 78.53975}
{6: 113.09724}
{7: 153.93791}
{8: 201.06176}
{9: 254.46878999999998}

如上所示第一行显示不出任何结果,只是告诉您它是一个生成器对象。

3、推导式与交互使用

推导式本质上还是循环,它可以和任何语句搭配使用,在西部世界中,提洛公司Delos在每次“游戏”结束后都要录入5个清除记忆的host接待者的姓名,这个名单录入功能使用了推导式之后,会非常简单。

print(['%d.%s'%(x,input()) for x in range(1,6)])

  


这个语句运行只后,系统会等待您输入5个姓名,并且加上序号打印出来,运行的结果如下:
Dolores
Bernard 
Maeve
Teddy
Grace
['1.Dolores', '2.Bernard', '3.Maeve', '4.Teddy', '5.Grace']

上面的Dolores,Bernard ,Maeve ,Teddy 和Grace五个人的姓名是键盘输入进去的,最后一行是代码打印出来。

4、推导式的嵌套

既然说到神奇的推倒式,本篇继续再推倒一个嵌套难题。

听好了:如何1行语句列出2-100的质数?使用其它任何语言这是不可能的任务。

在解决这个问题之前,我们分2步走,先看看如何判断一个质数,即没有因子的数。

(1)我们先使用推导式把该数的因子列出来,假设这个数是M。如下的程序,就可以完成这个任务。

M=int(input())
print([ x for x in range(2,M) if M%x ==0])

  

我们试试看输入100的结果是什么?列出了所有100的因子。

[2, 4, 5, 10, 20, 25, 50]

(2)下面我们再把M扩展到2-100的循环,分析上一步的结果,其实是整个质数的判断条件,如果M是质数那么这个列表一定是空的。所以下面我们把上面的式子放在外循环的条件中就行了。

print([M for M in range(2,100) if not [ x for x in range(2,M) if M%x ==0] ])

  


运行之后的结果如下图:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

推导式还有很多神奇的应用,就不一一列举了。

紧跟小牛步的脚步,学习Python有趣不掉队。

标签:10,化烦,推导,Python,生成器,range,print
From: https://www.cnblogs.com/dosboy/p/17935331.html

相关文章

  • 浅谈10kV站所柜内运行状态及环境指标监测管理平台分析
    安科瑞张田田摘要:在整个电能管理系统中,配电室综合监控占据着重要的位置。现阶段,配电室通常均运用无人值守、定时巡查制度,此方式不仅需要投入诸多的物力与人力,同时也不能实时监控配电室的安全与环境。而配电室环境的可靠性与稳定性直接影响着变压器等设备的正常运行。对此,主要对10kV......
  • python学习笔记3(概述、开发工具、编写方法、print简单语法)
    上一节学习了环境准备、职业方向、执行方式三个方面学习本节内容:(一)概述1、了解python语言1989年荷兰人发明、面向对向、解释型设计哲学:优雅、明确、简单,“人生苦短,我用python”脱水语言,能够和其他语言编写的模块轻松联结,“脱水语言”2、版本发展历程发展历程比较简单,前两天我在网上......
  • python opencv保存摄像头视频
    要使用Python和OpenCV将摄像头视频保存为.mp4格式,您需要使用cv2.VideoWriter的fourcc参数指定视频编码器。在大多数情况下,使用cv2.VideoWriter_fourcc(*'mp4v')将视频保存为.mp4格式是一个好选择。以下是一个示例代码: python复制importcv2 #0代表的是电脑上的默认摄像头......
  • 【代码分享】10行代码写一个超级简单的进度条
    我们知道,Python使用rich或tqdm模块可以轻松创建进度条,那么如果我们自己写一个,需要几行代码呢?答案是4行。显示效果完整代码完整代码如下,核心代码也就4行#!/usr/bin/envpython#-*-coding:UTF-8-*-importtimedefprogress_bar(desc:str,index:int,total:int,b......
  • ECharts 是一个使用 JavaScript 实现的开源可视化库¹²³⁴。它可以流畅地运行在 PC
    ECharts是一个使用JavaScript实现的开源可视化库¹²³⁴。它可以流畅地运行在PC和移动设备上,兼容当前绝大部分浏览器(如IE8/9/10/11,Chrome,Firefox,Safari等)²³⁴。ECharts底层依赖轻量级的Canvas类库ZRender¹²³,提供直观,生动,可交互,可高度个性化定制的数据可视化图表¹......
  • `pip freeze` 是一个命令,它会列出所有已安装的Python库及其版本号。这个命令在Python
    pipfreeze是一个命令,它会列出所有已安装的Python库及其版本号。这个命令在Python的包管理器pip中使用,主要用于生成一个项目的依赖列表。这个列表可以用于在其他环境中重新创建相同的库设置,通常通过使用pipinstall-rrequirements.txt命令,其中requirements.txt是由pipfree......
  • Python 实现HTML 转Word
    之前文章分享过如何使用Spire.DocforPython库将Word文档转为HTML格式,反过来,该库也能实现HTML到Word文档的转换。通过代码进行转换,避免了手动复制粘贴费时间,并且可能会出现错误或格式混乱等问题。Spire.DocforPython库能转换一个HTML文件为WordDocx格式,也能直接将HTML字符......
  • Python 设置word编辑限制 或解除word编辑限制
    限制编辑是一种控制文档或文件的访问权限的功能,它可以防止未经授权的用户对文档进行修改或编辑。通过启用编辑限制,您可以设定不同级别的权限,例如只允许查看、只允许评论或只允许特定用户进行编辑。本文将介绍如何使用Spire.DocforPython在Python程序中限制对Word文档的编辑......
  • P9991 [Ynoi Easy Round 2023] TEST_107 题解
    思路题目即要求删除区间中的一个或多个颜色。考虑假如枚举删除颜色\(k\)。那么在\(l,r\)中的答案为:\[\max_{i=1}^{m+1}a_i-a_{i-1}\]其中\(a_i\)为颜色\(k\)在\(l\simr\)中的出现位置,\(a_{0}=l,a_{m+1}=r\)。可以分类讨论。答案为\(a_1-l\),那么只需要维护\(......
  • 【Python机器学习课程设计】基于卷积神经网络的动物图像分类+数据分析
    一、选题背景在现代社会中,图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用,例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类,可以帮助人们更好地了解动物种类、数量和分布情况,从而支持相关领域的决策和研究。本研究的目标是使用卷积神......