列表输出循环左移_python 列表推导式(经典代码)(21)

文章首发微信公众号,微信搜索:猿说python

截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高。

一.什么是推导式

推导式是从一个或者多个迭代器快速简洁地创建数据类型的一种方法,它将循环和条件判断结合,从而避免语法冗长的代码,提高代码运行效率能熟练使用推导式也可以间接说明你已经超越了python初学者的水平。

1ab37603d5c0371689390744721567b7.png

二.条件推导式

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;条件表达式不成立则返回exp2condition:条件表达式exp2:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2x: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循环一倍。

e6431b5e9fa606a02897dad563cdf3a0.png

最后温馨提醒:测试请把循环次数改小一点,毕竟刚开始不小心多加了几圈圈,电脑死机了!

四.重点总结

1.注意在列表推导式书写的时候,所有表达式都必须在[]内部,因为返回值是列表list

2.列表推导式是python开发学习的知识点,多多联系,熟能生巧.

猜你喜欢:

1.python条件判断if/else

2.python列表list

3.for循环

4.python字典推导式

转载请注明:猿说Python » python列表推导式

想了解更多python内容请直接搜索微信公众号:猿说python

Python教程 - 猿说Python​www.shuopython.com
1bd786fcfd6814ec94964870379a26ed.png

本人也还在学习python中,博客会持续更新ing,有兴趣的小伙伴关注走一波,推荐浏览个人博客网站:猿说python,文章采用树状分类,结构目录清晰一点,文章内容有问题的话欢迎给出建议或者直接留言.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode100. 相同的树(dfs)

给定两个二叉树&#xff0c;编写一个函数来检验它们是否相同。如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。示例 1:输入: 1 1/ \ / \2 3 2 3[1,2,3], [1,2,3]输出: true### 代码java /*** Definiti…

k8s 分发证书文件 启动文件

接着上面的博客继续写 准备三台主机 192.168.1.71 192.168.1.72 192.168.1.73 现在k8s压缩包 我使用时1.12版本 不能下载请FQ 百度网盘提供1.12版本 https://pan.baidu.com/s/1Ty6DRaRtL-0HiTCwy5ubPA n6cy 192.168.1.71 执行 pwd -> /tmp tar -zxf kubernetes-server-lin…

如何确保您的Progressive Web App保持其Lighthouse审核分数

by Ondrej Chrastina通过Ondrej Chrastina 如何确保您的Progressive Web App保持其Lighthouse审核分数 (How to make sure your Progressive Web App keeps its Lighthouse audit score) I bet most of you have implemented a web application before. Some of you may even …

计算机字节换算在线,计算机字节换算(计算机字节换算器)

8bit(位)1Byte(字节)1024Byte(字节)1KB1024KB1MB1024MB1GB 换算率约等于1000(1024)&#xff0c;从大到小顺序为T、GB、MB(兆Zhao)、KB、B再小就是位了。.字节(Byte 发音&#xff1a;/‘bait/)&#xff1a;字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。 在ASCII码中…

Robot Framework自动化测试(一)--- 安装

所需环境&#xff1a; 1、python 2、robotframework  https://pypi.python.org/pypi/robotframework/2.8.5#downloads 3、wxPython ——>是python的一个GUI库&#xff0c;下面要安装的RIDE是基于这个库开发的&#xff0c;所以要安装 地址&#xff1a;https://wxpython.org…

leetcode1296. 划分数组为连续数字的集合(贪心算法)

给你一个整数数组 nums 和一个正整数 k&#xff0c;请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合。 如果可以&#xff0c;请返回 True&#xff1b;否则&#xff0c;返回 False。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,3,4,4,5,6], k 4 输出&…

linux_svn命令操作

转至元数据起始 linux下svn命令大全 1、将文件checkout到本地目录 svn checkout path&#xff08;path是服务器上的目录&#xff09;例如&#xff1a;svn checkout svn://192.168.1.1/pro/domain简写&#xff1a;svn co 2、往版本库中添加新的文件 svn add file例如&#xff1a…

用python玩转数据慕课答案第四周_大学慕课用Python玩转数据章节测试答案

大学慕课用Python玩转数据章节测试答案更多相关问题渗透泵型片剂控释的基本原理是A&#xff0e;减小溶出B&#xff0e;减慢扩散C&#xff0e;片剂膜外渗透压大于片剂膜内&#xff0c;将片内药物从语义学批评是什么&#xff1f;As usual, _____ man was given his individual as…

html怎么让五张照片并排显示,最考验右脑5张照片,30s内能发现问题都是牛人,PS做不出来...

我们的大脑认定这种空间不可能存在&#xff0c;然而却要忍受眼睛亲眼所见其存在的苦恼。“眼见为实”已经成为错误的判断标准&#xff0c;于是你会感到很过瘾&#xff0c;颠覆的快感。事实上&#xff0c;通过色彩&#xff0c;不仅可以考量人们的视力&#xff0c;更能判断大脑水…

aws v2.2.exe_如何使用Python 3.6在AWS EC2上创建运行uWSGI,NGINX和PostgreSQLDjango服务器...

aws v2.2.exeby Sumeet Kumar通过Sumeet Kumar 如何使用Python 3.6在AWS EC2上创建运行uWSGI&#xff0c;NGINX和PostgreSQLDjango服务器 (How to create a Django server running uWSGI, NGINX and PostgreSQL on AWS EC2 with Python 3.6) Getting a server up and running …

Cloud in Action: Install OpenStack Ocata from scratch

Cloud in Action: Install OpenStack Ocata from scratch薛国锋 xueguofeng2011gmail.comOpenStack can control and manage large pools of compute, storage, and networking resources throughout a datacenter, througha dashboard or via the OpenStack API, and work…

jQUery中closest和parents的主要区别是

①&#xff0c;前者从当前元素开始匹配寻找&#xff0c;后者从父元素开始匹配寻找&#xff1b;②&#xff0c;前者逐级向上查找&#xff0c;直到发现匹配的元素后就停止了&#xff0c;后者一直向上查找直到根元素&#xff0c;然后把这些元素放进一个临时集合中&#xff0c;再用…

leetcode1276. 不浪费原料的汉堡制作方案(贪心)

圣诞活动预热开始啦&#xff0c;汉堡店推出了全新的汉堡套餐。为了避免浪费原料&#xff0c;请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices 和 cheeseSlices&#xff0c;分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下&#xff1a; 巨无霸汉堡&#xff…

CentOS7配置ip

CentOS7配置ip 安装完centos7,重启就可以与linux第一次接触了。我是最小化安装&#xff0c;所以没有图形界面。登录介面显示发型版本和内核版本&#xff1a; CentOS Linux 7(Core) Kernel 3.10.0-862.e17.x86_64 on an x86_64 下面就是登录提示localhost login。在后面输入roo…

react开发模式_通过开发带有精灵动画的游戏来学习高级React模式

react开发模式by Pavel Vlasov通过帕维尔弗拉索夫(Pavel Vlasov) 通过开发带有精灵动画的游戏来学习高级React模式 (Learn advanced React patterns by developing a game with sprite animation) Have you ever wanted to learn some advanced React patterns? Or build you…

js脚本锁计算机软件,JS使用插件cryptojs进行加密解密数据实例

本文实例讲述了JS使用插件cryptojs进行加密解密数据。分享给大家供大家参考&#xff0c;具体如下&#xff1a;Testing websocketsvar key BOTWAVEE;//CBC模式加密function encryptByDESModeCBC(message) {var keyHex CryptoJS.enc.Utf8.parse(key);var ivHex CryptoJS.enc.U…

nginx、Apache、IIS服务器解决 413 Request Entity Too Large问题方法汇总

一、nginx服务器 nginx出现这个问题的原因是请求实体太长了。一般出现种情况是Post请求时Body内容Post的数据太大了&#xff0c;如上传大文件过大、POST数据比较多。处理方法 在nginx.conf增加 client_max_body_size的相关设置, 这个值默认是1m&#xff0c;可以增加到8m以增加提…

python代理池好难啊_新人不会自己搭建代理池?快来引用大佬的

新人不会自己搭建代理池?快来引用大佬的对于新人学习爬虫来说,虽然不会爬取太难的网站,但是有时候爬取的数据量过大的时候,也会遇到返回不了数据的问题,这时候打开网页一看.可能会看到"你的ip访问频率太高"这样的提示,出现这种问题的原因可能是,你被封ip啦.但是爬虫…

pat 1123(AVL)

题意&#xff1a;给n个数&#xff0c;按照顺序插入AVL&#xff0c;输出层次遍历&#xff0c;如果这颗AVL是完全二叉树&#xff0c;输出YES 否则输出NO 当时考试的时候。忘记AVL什么时候旋转了&#xff0c;数据结构不会写&#xff0c;感觉药丸 判断完全二叉树&#xff0c;这个简…

leetcode435. 无重叠区间(贪心算法)

给定一个区间的集合&#xff0c;找到需要移除区间的最小数量&#xff0c;使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”&#xff0c;但没有相互重叠。 示例 1: 输入: [ [1,2], [2,3], [3,4], [1,3] ] 输出: 1 …