16.python 列表推导式 - python基础入门
截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习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开发学习的知识点,多多联系,熟能生巧.
猜你喜欢:
转载请注明:猿说Python » python列表推导式
原文地址:https://www.cnblogs.com/shuopython/p/11722471.html
- 编译错误CS1595
- 分享一款带尖角浮出 公告栏 样式
- 在asp.net页面上得到Castle容器的实例
- WordPress自带TinyMCE编辑器相关功能增强
- 联众互动收购3家棋牌游戏公司,其域名买自蔡文胜手中
- 未来有什么工作绝对不会被人工智能取代
- WordPress在RSS Feed 中输出版权信息
- WordPress免插件仅代码实现文章浏览次数的方法(2)
- 苹果被告了,但网友们却觉得一点也不亏!
- Castle 整合.NET Remoting
- 这三要素,让区块链技术成为颠覆世界的技术
- 代码实现 WordPress 反垃圾评论功能
- Flash/Flex学习笔记(39):弹性运动
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS 6.5中利用yum搭建LNMP环境的步骤详解
- Linux下Kafka分布式集群安装教程
- Centos下升级Python及Mongodb驱动安装问题
- centOS6中使用crontab定时运行执行jar程序的脚本
- 基于cobbler 实现自动安装linux系统
- Polysh命令实现多日志查询的方法示例
- linux中启动tomcat后浏览器无法访问的解决方法
- Linux查看系统配置常用命令详解
- LNMP下提示File not found问题的解决方法
- Linux 配置SSH免密登录 “ssh-keygen”的基本用法
- 详解Ubuntu 16.04 pycharm设置桌面快捷启动方式
- Linux 7.4上安装配置Oracle 11.2.0.4图文教程
- linux磁盘管理软RAID的实现原理分析和方法分享
- Centos7下Samba服务器配置(实战)
- Linux系统中创建SSH服务器别名的两种方法