python列表推导式入门学习解析


Posted in Python onDecember 02, 2019

这篇文章主要介绍了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中的JSON使用
Apr 28 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Python学习入门之区块链详解
Jul 25 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
Aug 01 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
详解Django admin高级用法
Nov 06 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
Python如何进行时间处理
Aug 06 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
Python 矩阵转置的几种方法小结
Dec 02 #Python
numpy.transpose()实现数组的转置例子
Dec 02 #Python
Python中低维数组填充高维数组的实现
Dec 02 #Python
python函数声明和调用定义及原理详解
Dec 02 #Python
python return逻辑判断表达式实现解析
Dec 02 #Python
Python线程障碍对象Barrier原理详解
Dec 02 #Python
python 循环数据赋值实例
Dec 02 #Python
You might like
什么是短波收听SWL
2021/03/01 无线电
PHP clearstatcache()函数详解
2010/03/02 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
Python实现控制台输入密码的方法
2015/05/29 Python
python操作 hbase 数据的方法
2016/12/18 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
详解Django CAS 解决方案
2019/10/30 Python
python标准库os库的函数介绍
2020/02/12 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
交通事故检查书范文
2014/01/30 职场文书
体育口号大全
2014/06/18 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
公司合作协议范文
2014/10/01 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
女方离婚起诉书
2015/05/18 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android