python列表推导式的原理及使用方法
作者:机器学习入坑者 发布时间:2022-01-23 13:47:03
偶尔会在python中看见这样一行代码:
data = [x**2 for x in range(0, 5)]
# 此时data = [0, 1, 4, 9, 16]
如果不知道背后的语法规则,那么很难理解为什么可以在列表的方括号中写一个“for”循环?实际上,这种语法称为列表推导式,和lambda
表达式类似,都是在代码很短的情况下被使用。
本文将从两个方面讲解列表推导式:
(1)什么是列表推导式
(2)如何使用列表推导式
1、什么是列表推导式?
列表推导式对应的英文是list comprehension
,有时也被翻译为列表解析式,是一种创建列表的简洁语法。在开始分析它之前,
先看下面这种较为常用的列表创建方式:
data = [] # 创建空列表
for x in range(-5, 5):
if x >= -2:
# 如果x>=-2则给data添加i的平方
data.append(x**2)
print(data)
#输出:[4, 1, 0, 1, 4, 9, 16]
上面的代码首先创建了一个空列表,然后通过for循环来给列表添加新元素,并且需要通过if语句保证x在一定的数值范围,这是一种较为常见的创建方式。
问题在于,上述的创建需要写好几行代码,那么能不能提供一种简洁的创建列表的方式呢?列表推导式就是起到这个功能的,
它的原理图如下:
它的语法分成3个部分:
(1)需要多少个元素:x的取值为从-5到5,也就是需要循环9次
(2)判断本次循环是否插入新的元素:虽然一共需要9次循环,但并不是每次循环都必须要插入一个新元素(列表不一定要包含9个数值),每次循环时需要按照某种判断条件,比如当前循环的x是否大于-2,如果大于-2则插入一个新的值,如果小于-2则不插入新的值。
(3)元素的值:当前循环想要插入某个值,这个值可以是包含x的某个表达式,也可以不包含x。
现在,我们可以使用列表推导式来实现刚才的功能了:
data = [x**2 for x in range(-5, 5) if x >= -2]
print(data)
# 输出:[4, 1, 0, 1, 4, 9, 16]
可以把上面的三个部分称为:循环次数、想插入的值、判断是否插入的条件
2、如何使用列表推导式
前面的介绍提到:列表推导式包含三个部分,分别是循环次数、想插入的值、判断是否插入的条件。现在,使用这三个部分来学习如何使用三个列表推导式,来用简洁的列表创建代码。
题目:用15以内的奇数创建列表
分析:
(1)循环次数:15
(2)想插入的值:奇数
(3)判断条件:是不是奇数
所以写出了下面的代码:
得到了下面的值:
[1, 3, 5, 7, 9, 11, 13, 15]
总结:
列表推导式虽然看起来不符合常规,因为它在方括号内部使用for循环,但是它却起到了让代码更加简洁的作用,尤其是它可以通过“判断条件”来决定什么情况下插入新的值。
来源:https://zhuanlan.zhihu.com/p/9055809
猜你喜欢
- Python应用编程需要用到的针对不同数据库引擎的数据库接口:http://wiki.python.org/moin/DatabaseInt
- 1.文档对象模型(DOM)DOM是HTML和XML文档的编程基础,它定义了处理执行文档的途径。编程者可以使用DOM增加文档、定位文档结构、填
- 高能预警本文包含演示部分,请读者自行copy代码编译体验。参考资料:sync.WaitGroup / signal.Notify / con
- 一:模版的继承1.什么是模板继承?你需要事先在你想要使用的主页面上划定区域做好标记,之后在子页面继承的时候你就可以使用在主页面划定的区域,也
- 本博客将为各位分享Python Helium库,其是在 Selenium库基础上封装的更加高级的 Web 自动化工具,它能够通过网页端可见的
- 本文实例为大家分享了tensorflow实现线性回归的具体代码,供大家参考,具体内容如下一、随机生成1000个点,分布在y=0.1x+0.3
- 代码如下: EXEC sp_rename '表名.[原列名]', '新列名', 'column
- 远程运行最怕断电,训练了几个小时的数据说没就没,或者停止运行。用nohup 记录代码的输出,还可以不受断电的影响。方法1. 用nohup 运
- 左右布局,图片的宽度不固定。正好前几天测试闭合浮动元素时发现了overflow的特殊现象,倒是正好可以用在这里。测试通过:ie6/7&nbs
- 问:握怎样测试 MySQL安装?答:可以通过以下命令测试MySQL服务器是否工作:C:\> C:\Program Files\MySQ
- 为了实现项目中的搜索功能,我们使用的是全文检索框架haystack+搜索引擎whoosh+中文分词包jieba安装和配置安装所需包pip i
- 李开复曾经在年前表示,谷歌公司会在今年春节期间,对Google谷歌的搜索结果页进行“从未有过的尝试”修改,以凸显农历春节的喜庆气氛。现在,输
- python opencv把一张图片嵌入(叠加)到另一张图片上1、背景:最近做了个烟火生成系统的界面设计,需要将烟雾图片嵌入到任意一张图片中
- js也是可以做出狂炫的图形的,恭请超级高手分析。给大家看个例子吧。http://www.p01.org/releases/DHTML_con
- 本文实例讲述了Golang最大递减数算法问题。分享给大家供大家参考,具体如下:给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字
- 问题说明最近在写爬虫,由于单个账号访问频率太高会被封,所以需要在爬虫执行一段时间间隔后自己循环切换账号所以就在想,有没有像单片机那样子设置一
- 在数据分析中有时候需要自己定义分组规则 这里简单介绍一下用一个字典实现分组people=DataFrame( np.random
- 虎扑体育-NBA球员得分数据排行 第1页 示例代码:import requestsfrom lxml import etreeur
- Python 运算符通常用于对值和变量执行操作。这些是用于逻辑和算术运算的标准符号。在本文中,我们将研究不同类型的 Python 运算符。&
- 经常在网上冲浪的朋友是否曾注意到有些网站的鼠标不是规则的斜向上箭头的形状,而是"十"