Python基础 | 关于“循环”那些事
Python中常见的循环有两类:
- for
- while
for 循环
list
list
是最常见的可迭代对象,其他可迭代的对象例如 dict
,set
,file lines,string
等
for i in set((1,2,3)):
print(i)
输出:
1
2
3
import string
list_num = list(string.digits)
for i in list_num:
# 输出偶数
if int(i)%2 == 0:
print(i)
输出:
0
2
4
6
8
range
range 有头无尾
,e.g. range(1,3)
实际得到的序列是(1,2)
for i in range(3):
print(i)
输出:
0
1
2
for i in range(1,9):
# 输出偶数
if int(i)%2 == 0:
print(i)
输出:
2
4
6
8
enumerate
enumerate
为循环的list加上index,这个index是编号是从0开始的
list_val = [1,2,3,5,8]
for idx,val in enumerate(list_val):
print(idx,val)
输出:
0 1
1 2
2 3
3 5
4 8
zip
同时遍历两个以上的list,并按顺序打包
list_1 = string.digits[:3]
list_2 = string.ascii_lowercase[:3]
list_3 = string.ascii_uppercase[:3]
print(list_1,list_2,list_3)
输出:
012 abc ABC
list_merge_1 = list(zip(list_1,list_2,list_3))
print(list_merge_1)
list_merge_2 = [i+j+k for (i,j,k) in zip(list_1,list_2,list_3)]
print(list_merge_2)
输出:
[('0', 'a', 'A'), ('1', 'b', 'B'), ('2', 'c', 'C')]
['0aA', '1bB', '2cC']
# 元素组合
list_merge_3 = [i+j for i in list('123') for j in list('ABC')]
print(list_merge_3)
输出:
['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C']
while 循环
while相当于for和if的结合体。
while不一定执行的是循环,有时候功能和if差不多,这个时候while的意义相当于如果条件为真,那就执行如下操作
while更多扮演for和if联合的角色,相当于重复执行如下操作,知道判断条件(会不断变化)不再成立为止
for和while的区别
- for循环中迭代的条件是遍历一个序列,这个序列是有限或者确定的。
- while循环则是基于条件判断,而没有明确的迭代序列,所以while循环可以用来探索序列(先试着执行,有问题咱就退出),比如爬虫的时候你不知道网页page_index到哪结束;
- for循环不会“重复”执行完全一样的操作,除非迭代的list对象是一样的,而while是可以重复执行相同操作的,这种特定在需要“重试”的场景中会经常用到。e.g.网页返回失败的时候可以重试几次,登陆失败的时候可以重试几次。
while相当于if时
# 需要break的配合
x = 2
while(x>1):
print('这个值大于1')
break
输出:
这个值大于1
while充当for和if的混合体
# 需要自增的index来配合
idx = 1
while(idx < 5):
print(idx)
idx += 1
输出:
1
2
3
4
泛循环
如果将循环理解为按照顺序遍历一个序列。
除了用for、while还可以用其他函数达到“遍历”的效果。
列表解析
本质还是循环,常见的for循环在语句上的表现是多行,而列表解析
是一行
# 筛选奇数
num_odd = [i for i in range(1,10) if i%2==1]
print(num_odd)
输出:
[1, 3, 5, 7, 9]
map
对序列中多个对象执行相同操作
list(map(lambda x:x**2,range(4)))
输出:
[0, 1, 4, 9]
list_words = ['life','is','short','use','python']
list(map(lambda x:len(x),list_words))
输出:
[4, 2, 5, 3, 6]
迭代器
变种的for循环
按顺序将序列值一次“弹出”,同时被”弹出“的值移出序列
序列为空时,报错StopIteration
vals_iter = iter(list(range(3)))
next(vals_iter)
输出:
0
迭代器可以如上述举例一样是”有穷“的迭代,也可以是”无穷“的,比如自增序列(index为自然顺序)
# 定义一个迭代器
class test_iter:
def __init__(self):
self.a = 1
self.b = 1
def __iter__(self):
return self
def __next__(self):
x = self.a
self.a, self.b = self.b, self.a+self.b
return x
fb = test_iter()
for i in range(6):
print(next(fb))
输出:
1
1
2
3
5
8
生成器
生成器和迭代器的对比
相同点:
- 从执行的结果看都是基于一定的规则”迭代“产生序列(无论是“无穷”系列还是“有穷”系列)
- 都支持iter,next方法
- “弹出”数值后,会清除已“弹出”的数值
不同点:
def num_even(x):
while(x>0):
if x%2 == 0:
yield x
x -= 1
x = num_even(9)
for i in x:
print(i)
输出:
8
6
4
2
循环的跳出和继续
break
是跳出循环,也就是不再执行该循环的操作,如果是嵌套循环,那么上层的循环也终止
continue
跳过当前的操作,进入下一轮循环,对上层的循环没有影响
pass
接着执行,用得很少,此处不讲
break,continue之后的语句也不会执行,所以一定要注意这两个关键字放置的位置
单层循环
for i in range(5):
print(i)
if i == 2:
break # 当i=2时,循环结束
print('不会出现')
输出:
0
1
2
for i in range(5):
if i == 2:
continue # 跳过2这个值
print('不会出现')
print(i)
输出:
0
1
3
4
i = 1
while(i<5):
print(i)
break # 执行一次就结束
print('不会出现')
输出:
1
i = 1
while(i<5):
print(i)
i += 1
if i == 2:
continue
print('不会出现')
输出:
1
2
3
4
while中用continue要小心啊,比如如下代码是会一直执行的
i = 1
while(i<5):
print(i)
if i == 2:
continue
print('不会出现')
i += 1
嵌套循环
for i in range(3):
for j in list('abc'):
if j == 'b':
break # 到b的时候就停止了
print(i,j)
输出:
0 a
1 a
2 a
for i in range(3):
for j in list('abc'):
if i == 1 or j=='b':
continue
print(i,j) #不会出现带1和b的输出值
输出:
0 a
0 c
2 a
2 c
Python基础 | 关于“循环”那些事的更多相关文章
- 第五篇:python基础之循环结构以及列表
python基础之循环结构以及列表 python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.pyth ...
- Python 基础 while 循环
Python 基础 while 循环 while 循环 在生活中,我们遇到过循环的事情吧?比如循环听歌.在程序中,也是存才的,这就是流程控制语句 while 基本循环 while 条件: # 循环体 ...
- python基础之循环结构以及列表
python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.python IDE的选择 IDE的全称叫做集成 ...
- python基础(六)循环
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 循环用于重复执行一些程序块.从上一讲的选择结构,我们已经看到了如何用缩进来表示程序 ...
- python基础之循环
一.while循环 如果条件成立(true),重复执行相同操作,条件不符合,跳出循环 while 循环条件: 循环操作 (1)while循环示例 例:输入王晓明5门课程的考试成绩,计算平均成绩 i ...
- python基础之循环语句
一.if条件语句: 语法: 1.if单分支(单重条件判断) if expression: expr_true_suite 注释:expession为真执行代码expr_true_suite if单分支 ...
- python基础之循环与迭代器
循环 python 循环语句有for循环和while循环. while循环while循环语法 while 判断条件: 语句 #while循环示例 i = 0 while i < 10: i += ...
- Python基础->for循环、字符串以及元组
python流程控制>for循环.字符串以及元组 学习有关序列的思想.序列:一组有顺序的东西.所有的序列都是由元素组成的,序列中的元素位置是从0开始编号的,最后一个元素的位置是它长度减一. fo ...
- Python 基础06 循环
循环用于重复执行一些程序块.从上一讲的选择结构,我们已经看到了如何用缩进来表示程序块的隶属关系. 循环也会用到类似的写法. for 循环 for 循环需要预先设定好循环的次数(n) 然后执行隶属于fo ...
随机推荐
- unittest(9)- 使用ddt给测试用例传参
# 1. http_request.py import requests class HttpRequest: def http_request(self, url, method, data=Non ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- 流量全球第4的Reddit到底是一个怎样的网站?
对于喜欢NBA的我来说,Reddit是经常接触的一个网站.或者说,很多关于NBA的最新消息都是从Reddit上传出来的.值得一提的是,NBA版块在Reddit所有版块中用户活跃程度排名第三,也是体育版 ...
- js 网页运行原理
当我们打开一个网页的时候,浏览器会首先创建一个窗口,这个窗口就是我所知道的window对象,也就是整个Javascript运行所依附的全局变量. 为了加载网页文档,当前窗口又需要创建一个Documen ...
- 云服务器——之Linux下安装tomcat
在上一篇文章中已经准备好了tomcat安装的基本环境jdk的安装,那么我们现在来记录tomcat的安装. 第一步:下载tomcat安装包 http://tomcat.apache.org/ 第二步:通 ...
- Selenium2自动化——初体验
一.Windows下的环境搭建 1.安装Python 访问Python官网:https://www.python.org/ 2.安装setuptools与pip setuptools是Python e ...
- AI超越人类大脑,或许是场“别有用心者”的骗局
谷歌.微软.苹果.特斯拉.百度.腾讯.阿里等互联网巨头企业,以及纳德拉.马斯克.扎克伯格.马云等互联网大佬,近年来一直都对人工智能--AI非常上心.在众多场合对AI给予了或肯定,或恐惧的评价.但无 ...
- 微信小程序从开发至发布的流程
今天在公司将这几天开发的小程序,进行版本上线,在这里记录下. 首先,将微信开发工具里的代码上传到微信小程序平台里,如下所示 之后,在微信小程序平台进行审核提交,填写相应的信息即可,注意,审核提交分为紧 ...
- (Win10)Java,Maven,Tomcat8.0,Mysql8.0.15安装与环境配置,以及IDEA2019.3使用JDBC连接MySQL、创建JavaEE项目
之前用windows+linux的双系统,最近不怎么舒服就把双系统给卸了,没想到除了问题,导致有linux残余,于是就一狠心重装了电脑,又把Java及其相关的一些东西重新装了回来,还好当初存了网盘链接 ...
- 用jQuery怎么做到前后端分离
传统的web开发模式想必大家都知道,不管是jsp.asp.php或者一些魔板引擎开发,其实道理都是一样的,都是服务端渲染,原理是:浏览器发送一个get请求,服务器对应的返回前端一个html页面,由浏览 ...