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的mysqldb安装步骤详解
Aug 14 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
对python3 urllib包与http包的使用详解
May 10 Python
Python3实现的简单三级菜单功能示例
Mar 12 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
python redis 批量设置过期key过程解析
Nov 26 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 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
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
Python requests设置代理的方法步骤
2020/02/23 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
发展部经理职责规定
2014/02/22 职场文书
家长学校实施方案
2014/03/15 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
中国梦口号
2014/06/13 职场文书
学校师德师风整改方案
2014/10/28 职场文书
小学远程教育工作总结
2015/08/13 职场文书