python列表推导式入门学习解析
作者:猿说python 发布时间:2022-04-25 14:28:00
这篇文章主要介绍了python列表推导式入门学习解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
一.什么是推导式
推导式是从一个或者多个迭代器快速简洁地创建数据类型的一种方法,它将循环和条件判断结合,从而避免语法冗长的代码,提高代码运行效率。能熟练使用推导式也可以间接说明你已经超越了python初学者的水平。
报错
二.条件推导式
1.语法
'''
value1:如果条件表达式condition成立,返回value1 ; 如果条件表达式不成立,返回value2 ;
condition:条件表达式
Value2:如果条件表达式condition成立,返回value1 ; 如果条件表达式不成立,返回value2 ;
'''
value1 if condition else Value2
2.实战练习
假如有这样一个需要:判断一个数字是奇数还是偶数?
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
@File:python_list.py
@Time:2019/9/30 20:45
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
# 新手代码
x = 10
if x%2 == 0:
print("新手说:x是偶数")
else:
print("新手说:x是奇数")
# 老司机
x = 15
print("老司机说:x是偶数") if x%2 == 0 else print("老司机说:x是奇数")
输出结果:
新手说:x是偶数
老司机说:x是奇数
观察上面代码可以看出来,选手一(新手)一共占用了5行代码,而选手二(老司机)完成同样一个功能仅仅只需要两行,这就是性价比,往往这就是职场上鉴别工作能力/升职加薪的细节。
三.列表推导式
列表推导式是条件推导式和循环一起配合使用,并返回一个列表,并且整个表达式需要在[]内,因为返回值也是列表。
1.语法
'''
语法一:
exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则不返回
x:for循环中变量
data:一个序列(比如:列表/元组/字符串等)
condition:条件表达式
'''
[exp1 for x in data if condition]
'''
语法二:
exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2
condition:条件表达式
exp2:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2
x:for循环中变量
data:个序列(比如:列表/元组/字符串等)
'''
[exp1 if condition else exp2 for x in data]
2.实战练习
需求一:获取0~20的所有偶数并且乘以10,并返回所有计算之后的结果。示例代码如下:(使用列表推导式语法一实现)
'''
1.因为是获取0~20,包括20,所以使用range(0,21)
2.x*10 等价 语法一中的exp1
3.x%2 == 0 等价 语法一中的条件表达式condition
4.range(0,21) 等价 语法一中的data(序列)
'''
list1 = [x*10 for x in range(0,21) if x%2 == 0]
print(list1)
print(type(list1))
输出结果:
[0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
<class 'list'>
需求二:将0~20的偶数乘以10,奇数乘以100,并返回所有计算之后的结果。示例代码如下:(使用列表推导式语法二实现)
'''
1.因为是获取0~20,包括20,所以使用range(0,21)
2.x*10 等价 语法二中的exp1
3.x*100 等价 语法二中的exp2
4.x%2 == 0 等价 语法二中的条件表达式condition
5.range(0,21) 等价 语法一中的data(序列)
'''
list2 = [x*10 if x%2 == 0 else x*100 for x in range(0,21) ]
print(list2)
print(type(list2))
输出结果:
[0, 100, 20, 300, 40, 500, 60, 700, 80, 900, 100, 1100, 120, 1300, 140, 1500, 160, 1700, 180, 1900, 200]
<class 'list'>
3.效率对比
可能有童鞋纳闷,我明明for循环就能实现的功能,为毛要用这鸟玩意推导式?
使用列表推导式的效率远远高于for循环,可能执行一句print(“helloworld”)对于cpu而已只需要0.0002秒,你可能感觉不到差距,如果需要输出一亿次helloworld呢?往往细节觉得成败!
假如有一个需求:将0~10000000(一亿)以内的所有整数存到列表中,对比一下列表推导式和for循环耗时情况:
import time # 添加time模块,用于统计代码运行时间
#一共添加10000000次数据到列表中
total_num = 10000000
#使用列表推导式
start_time = time.time()
list1 = [x for x in range(0,total_num)] # 列表推导式
end_time = time.time()
print("使用列表推导式耗时:{}秒".format(end_time-start_time))
#使用普通for循环
start_time = time.time()
list2 = list()
for x in range(0,total_num): # for循环
list2.append(x)
end_time = time.time()
print("使用普通for循环耗时:{}秒".format(end_time-start_time))
输出结果:
使用列表推导式耗时:0.5455152988433838秒
使用普通for循环耗时:1.2068836688995361秒
输出结果很明显,实现通用的功能,列表推导式的效率整整高出普通for循环一倍。
最后温馨提醒:测试请把循环次数改小一点,毕竟刚开始不小心多加了几圈圈,电脑死机了!
四.重点总结
1.注意在列表推导式书写的时候,所有表达式都必须在[]内部,因为返回值是列表list
2.列表推导式是python开发学习的知识点,多多联系,熟能生巧.
来源:https://www.cnblogs.com/shuopython/p/11722471.html
猜你喜欢
- 从毕业实习算起,从事可用性方面的工作到现在已经5年了。在此记录笔者的一些所见所想,和大家讨论分享一下。用户研究在“以用户为中心”的界面设计方
- 绿色在黄色和蓝色(冷暖)之间,属于较中庸的颜色,这样使得绿色的性格最为平和、安稳、大度、宽容。是一种柔顺、恬静、满足、优美、受欢迎之色。也是
- User Centered Design 以用户为中心的设计,一说到这个很多人马上想到互联网和软件的设计,因为在IT、互联网行业提得最多。其
- asp分页做为一个经典的asp问题,有着非常丰富的分页形式和分页方法,但是大多数的asp分页都是使用VBscript作为服务器端的脚本,本文
- 当你要使用data URI scheme的时候,你会发现,虽然他可以使用在绝大多数浏览器上,但无法再IE6和IE7上工作。不过值得庆幸的这一
- Ajax(Asynchronous Javascript And XML)翻译成英文就是“异步Javascript和XML”。即用Javas
- 问题当浏览SQL Server 2008的新特性时,我们看到了透明数据加密。这看起来很有趣。您能为我们解释一下并介绍下执行它的细节吗?专家解
- 一、MySQL数据库的实例管理器概述:1、MySQL数据库的实例管理器(IM)是通过TCP/IP端口运行的后台程序,用来监视和管理MySQL
- subprocess.run()运行并等待args参数指定的指令完成,返回CompletedProcess实例。参数:(*popenargs
- 搭建一个oracle,下面会有很多schema,每个schema下的数据都不影响。感觉和mysql的库的概念很像,现在用的数据库管理系统其实
- 昨天在写“同IP站点查询”工具的时候,需要先用ASP获取查询域名的IP,本来是用WSHSHELL组件,代码如下:<%@LANGUAGE
- Web开发中,我们经常会遇到分页显示和排序数据记录集的情况,这在服务器端使用服务器端的代码和数据库技术是件很轻松的事情,比如:ASP、PHP
- 我们有时候看到一些文章因为一行的字符超长而把一些表格或DIV撑开或字符写到溢出了.如何防止表格防止撑开,表格不被内容撑开,单行字符超长div
- 影响 JavaScript性能的另外一个杀手就是递归,在上一节中提到采用memoization技术可以优化计算数值的递归函数,但memoiz
- 本文实例讲述了php中正则替换函数ereg_replace用法。分享给大家供大家参考。具体如下:下面的实例是利用php 正则替换函数 ere
- 前一段时间,一个流行的东方系列mv 《bad apple》 带来一股奇怪的风潮: 各种技术狂人纷纷把这段mv在一些匪夷
- Function ChkInvaildWord(Words) Const InvaildWords=&quo
- 这是我上一篇关于安全的文章的其中一节。这是一个众所周知的事实,对你运行中的网站的MySQL数据库备份是极为重要的只需按照下面3步做,一切都在
- 综述:本文讨论了VBScript和 JScript之间的区别,以及它们的使用场合。推荐:Vbscript5.5中文语言参考手册chm格式下载
- 0. 前言无论在工作中,还是学习中,都会出现这样子的需求,对某张表进行了排序(按时间排序也好,其他字段排序也罢),然后获取前x行的数据,由于