Python核心技术与实战——五|条件与循环
我们在前面学习了列表、元组、字典、集合和字符串等一系列Python的基本数据结构类型,下就需要把这一个个基本的数据串在一起了,这就要用到我们今天要讲的东西——”条件与循环“。
一.条件语句
条件语句的用法很简单,比如我们想要表示y=|x|这个函数,那么对应的代码就是这样的(简化代码不考虑异常,后面的也一样)
#y = |x|
x = float(input('>>>'))
if x < 0:
y = -x
else:
y = x
要注意的是Python和其他的语言不同,在条件语句中是不能加括号的,句末也要加上冒号。这是Python特定的语法规范。
if (x<0)
Python是不支持switch语句的,在多个条件判断时,我们要用else if实现。在Python的用法时elif,大概就是这么个思路
if case1:
do 1
elif case2:
do 2
elif case3
do 3
else:
do n
其中if语句是可以单独使用的,而elif和else必须要和if配套使用。
有些时候为了简化代码,可以将判定的条件省略,可以这么用:
s = 'this is a string'
l = ['a','b','c']
i = 123
if s:
print('字符串非空')
if l:
print('列表非空')
if i:print('整数不为0') #注意这样的写法(在同一行)也是可以的
判定条件的省略用法大概是下面几种
| 数据类型 | 结论 |
| String | 空字符串解析为False,其余为Ture |
| Int | 0解析为False,其余为Ture |
| Bool | Ture为Ture |
| list/tuple/dict/set | iterable为空的时候为False,其余都为True |
| Object | None为False,其余为True |
但是在实际应用时,除了Bool类型的数据,条件的判定条件最好时显性的,也就是说最好写出来判定的条件,为后期的维护和他人的阅读创造好的条件。比如判定一个数是否为0
if i:
print('这个数是0') if i==0:
print('这个数是0')
显而易见下面的语法更加的易读。特别是在一堆代码段中,要搞明白这些也是不容易的。
二.循环语句
循环的本质就是遍历集合中的元素。Python的循环一般通过while和for来实现。
for循环常常用于对可迭代对象的遍历
d = {'name':'jack',
'age':20,
'job':'hr'}
for key in d:
print(key) #遍历字典的key
for value in d.values():
print(value) #遍历字典的value
for k,v in d.items():
print('key:{},value:{}'.format(k,v)) #遍历键值对
这里举例的是字典,因为字典本身只有key是可迭代的,如果我们要遍历它的值或键值对,就要用到字典的内置函数value()或items()来实现。而在有些情况里还可以通过range()函数拿到索引,再去遍历集合中的元素
l = ['a','b','c','d','e','f','g']
for index in range(0,len(l)):
if index<3:
print(index,l[index])
当我们同时需要索引和元素时,还有一种更加简洁的方式:利用Python的内置函数enumera()。用它来遍历集合,不仅返回每个元素,还返回其对应的索引,那么上面的代码就可以写成这样的
l = ['a','b','c','d','e','f','g']
for index,item in enumerate(l):
if index < 5:
print(item)
在循环语句中,我们还常常搭配continue和break一起使用。continue就是跳过当前这一段循环,继续执行下面一轮循环,而break就是完全跳出整个循环体。适当的结合continue和break,会使纯光绪更加简洁、易读。举个例子:现在有两个字典,分别时产品名称到价格的映射和产品名称到颜色列表的映射。如果我们想找出价格小于1000的,并且颜色不是红色的所有产品名称和颜色的组合,不用continue就是这样的
name_price = {}
name_color = {}
for name,price in name_price.items():
if price < 1000:
if color in name_color:
for color in name_color[name]:
if color != 'red':
print('name:{},color:{}'.format(name,color))
else:
print('name:{},color:{}'.format(name,'None'))
而加上continue就简单的多
name_price = {}
name_color = {}
for name,price in name_price:
if price >= 1000:
continue
if name not in name_color:
continue
for color in name_color[name]:
if color == 'red':
continue
print('name:{},color:{}'.format(name,color))
可以看出来第一种方法有5层for或if的嵌套,而第二种方法加上Continue只有3层嵌套。
前面讲的是for循环,其实对于while循环原理也是一样的,只要在condition满足时,一直重复循环体内部的操作,知道condition不再满足,就跳出循环体。
while contition:
...
很多时候for和while循环可以相互转换,比如上面用for循环遍历列表,要是用while循环也可以完成。
l = ['a','b','c','d','e','f','g']
index = 0
while index<len(l):
print(l[index])
index +=1
那么这两种用法有什么区别呢?如果只是遍历一个已知的集合,找出满足条件的元素并进行相应的操作,那么使用for循环更加简洁。但如果需要在满足某个条件前不停的重复某些操作,并没有特定的集合需要遍历,那么使用一般使用while循环。比如如果有个交互式的问答系统,在接收到输入信息为‘q’时程序退出。这个时候一般是不用for循环的。
while True:
data = input('>>>')
if data == 'q':
print('stop')
break
else:
print(data)
三.for和while的效率
两种循环的效率问题是应该关注的。
i = 0
while i < 1000000:
i =+ 1 for i in range(0,1000000):
pass
这两个循环是等价的,而由于range()函数是由C语言直接写的,调用的速度非常快;而while循环中的 i +=1这个操作是通过Python解释器直接调用底层的C语言;并且这个操作涉及到对象的创建和删除(因为i是int,是immutable,i += 1相当于i = new(i +1)。所以for循环的效率会更高。
四.条件和循环的复用
有些时候会把条件和循环并在一行的操作,例如
#复写方法
expression1 if condition else expression2 for item in iterable
#分开写法
for item in iterable:
if condition:
expression1
else:
experssion2
而如果没有else语句,就可以这么写
experssion for item in iterable if condition
举个例子,比如我们要绘制f(x)=2|x|+5的函数图,就要根据x数据点算出对应的y的值,那么用一行代码就可以了
x = [-5,-4,-3,-2,-1,0,1,2,3,4,5]
y = [value*2+5 if value >0 else -value*2+5 for value in x]
print(y)
熟练之后,会发现这种方式非常方便,但是如果逻辑比较复杂的时候一行就难于理解,也容易出错不利于他人读代码。用正常的方式写代码也是一种好的规范和选择。
五.思考题
由两个列表attributes和values,然后针对values中每一组子列表value,输入器和attributes中的键对应后的字典,最后返回字典组成的列表
attributes = ['name', 'dob', 'gender']
values = [['jason', '2000-01-01', 'male'],
['mike', '1999-01-01', 'male'],
['nancy', '2001-02-01', 'female']
] # expected outout:
[{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'},
{'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'},
{'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}]
可以试试用两种方式来完成:复用的或者分行的:
out = []
for value in values:
person = {}
for index in range(len(value)):
person[attributes[index]] = value[index]
out.append(person)
print(out)
单行版:
out = [{attributes[i]: value[i] for i in range(len(attributes))} for value in values ]
print(out)
Python核心技术与实战——五|条件与循环的更多相关文章
- Python核心技术与实战 笔记
基础篇 Jupyter Notebook 优点 整合所有的资源 交互性编程体验 零成本重现结果 实践站点 Jupyter 官方 Google Research 提供的 Colab 环境 安装 运行 列 ...
- 【python学习笔记】5.条件、循环和其他语句
[python学习笔记]5.条件.循环和其他语句 print: 用来打印表达式,不管是字符串还是其他类型,都输出以字符串输出:可以通过逗号分隔输出多个表达式 import: 导入模块 impo ...
- Python核心技术与实战——十九|一起看看Python全局解释器锁GIL
我们在前面的几节课里讲了Python的并发编程的特性,也了解了多线程编程.事实上,Python的多线程有一个非常重要的话题——GIL(Global Interpreter Lock).我们今天就来讲一 ...
- Python基础(6)--条件、循环
本文的主要内容是 Python 的条件和循环语句以及与它们相关的部分. 我们会深入探讨if, while, for以及与他们相搭配的else,elif,break,continue和pass语句. 本 ...
- Python 2.7 学习笔记 条件与循环语句
本文介绍下python条件和循环语句的语法 一.if条件语句 语法格式如下: if 表达式: .... elif 表达式: .... elif 表达式: .... else: ..... 说明:与其它 ...
- Python核心技术与实战——六|异常处理
和其他语言一样,Python中的异常处理是很重要的机制和代码规范. 一.错误与异常 通常来说程序中的错误分为两种,一种是语法错误,另一种是异常.首先要了解错误和异常的区别和联系. 语法错误比较容易理解 ...
- Python学习之路4☞条件和循环
一.if语句 1.1 功能 计算机又被称作电脑,意指计算机可以像人脑一样,根据周围环境条件(即expession)的变化做出不同的反应(即执行代码) if语句就是来控制计算机实现这一功能 1.2 语法 ...
- python系列八:Python3条件控制&循环语句
#!/usr/bin/python #-*-coding:gbk-*-#Python3 条件控制&循环语句import randomage = int(input("请输入你的年龄: ...
- Python学习笔记五--条件和循环
5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...
随机推荐
- Oracle JET 单页面应用程序Router 使用(上)
单页面应用程序:使用一个进加载一次的网页,如果页面由于用户的交互而改变,则仅绘制更改的页面部分. 要创建单页面应用程序需要使用 oj.Router 的虚拟导航来支持,ojModule 用来响应页面的重 ...
- 使用SSH和Nginx做内网HTTP映射
https://blog.csdn.net/imdyf/article/details/80143991
- 安装 Windows 系统在 NVMe 规范的 M.2 接口的固态硬盘(SSD)上
作为一个程序员很重要的一项技能就是装系统 @_@,以前我都是随便用网上的工具做个系统盘,每次要用直接随手就搞好了,节省大家时间. 但最近同事装了个贼小的固态,然后我启动盘里的系统果断识别不出来他的固态 ...
- tensorflow 分布式搭建
https://blog.csdn.net/qq_40652148/article/details/80467131 https://yq.aliyun.com/articles/602111 git ...
- 原生JS去重
方式一: function deleteRepetionChar(arr){ //先判断输入进来的是数组对象还是字符串 if( typeof arr == "object"){ v ...
- spring + springMVC +hibernate 配置2
这种方式比较精简 配置项不多 spring采用自动扫描配置 ,分spring_springMVC.xml . hibernate_config.xml 两个文件 web.xml配置如下 <?x ...
- PC、APP、H5三端测试的相同与不同
随着手机应用的不断状态,同一款产品的移动端应用市场占相较PC端也越来越大,那么app与PC端针对这些产品的测试有什么相同与不同之处呢?笔者总结如下: 首先谈一谈相同之处... 一,针对同一个系统功能的 ...
- 理解ES6中的Symbol
一.为什么ES6引入Symbol 有时候我们在项目开发的过程中可能会遇到这样的问题,我写了一个对象,而另外的同时则在这个对象里面添加了一个属性或是方法,倘若添加的这个属性或是方法是原本的对象中本来就有 ...
- pandas DataFram的insert函数
原文链接:https://blog.csdn.net/yanwucao/article/details/80211984 DataFrame.insert(loc, column, value, al ...
- vue--》如何使用wacth监听对象的属性变化?
在开发过程中,我们经常需要监听watch监听一个对象的变化,但是如何来实现 监听对象中属性的变化呢? 先回顾一下如何监听整个对象的变化,使用watch就行了 export default { ...