这篇文章主要介绍了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,列表,推导式
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]