Python学习之循环方法详解
作者:渴望力量的哈士奇 发布时间:2021-04-13 21:07:15
什么是循环? —> 循环是有着周而复始的运动或变化的规律;在 Python 中,循环的操作也叫做 ‘遍历’ 。 与现实中一样,Python 中也同样存在着无限循环的
方法与有限循环的方法。接下来我们就先看看有限循环的方法 —> for 循环
for 循环
for 循环的功能:通过 for 关键字将列表、元组、字符串、字典中的每个元素按照序列顺序进行遍历(循环),当读取到最后一个元素循环也就结束了。
for 循环的用法:示例如下
for item in iterable:# for循环语句块
print(item)# 每次循环对应的代码块
# 代码块所需要的缩进
# >>> iterable : 可循环的数据类型,如列表、元组、字符串、字典
# >>> item : iterable 中的每一个成员(元素)
# >>> 返回值 : for循环是语句,没有返回值;但是在一定的特殊情况下,是有返回值的。
books = ['Python不秃头', 'PHP是最美的语言', 'DBA从入门到删库', '面向监狱的爬虫']
for book in books:
print(book)
print('finish')
# >>> 执行结果如下:
# >>> Python不秃头
# >>> PHP是最美的语言
# >>> DBA从入门到删库
# >>> 面向监狱的爬虫
# >>> finish
str_demo = 'Python'
for i in str_demo:
print(i)
# >>> P
# >>> y
# >>> t
# >>> h
# >>> o
# >>> n
users = {'name': 'Neo', 'age': '18'}
for user in users:
print(user, users[user])
# >>> 执行结果如下:
# >>> name Neo
# >>> age 18
# >>> 该循环的每一次遍历取 kay 的 value 不是很友好,有没有更好的方法方便我们取值呢?继续往下看。
字典利用 items 内置函数进行 for 循环
items() 内置函数的功能:将字典转成伪列表,每个 key 、 value 转成元组。
items() 内置函数的用法:示例如下
for key, value in dict.items():
print(key, value)
# >>> items : 无参数
# >>> key : for 循环体中获取的字典当前元素的 key
# >>> value : for循环体中对应的 key 的 value 的值
# >>> 返回值 : for 循环是语句,没有返回值;items 返回一个列表
dict_users = {'name': 'Neo', 'age': '18'}
for key, value in dict_users.items():
print(key, value)
# >>> 执行结果如下:
# >>> name Neo
# >>> age 18
# 如果是一个列表内存在着字典元素呢?
user_list = [{'name': 'Neo'}, {'name': 'Jack'}]
for user in user_list:
print(user.get('name'))
print(type(user))
print(user.get('age'))
# >>> 执行结果如下:
# >>> Neo
# >>> <class 'dict'>
# >>> None# 因为 age 并没有被定义,所以返回的是 Node
# >>> Jack
# >>> <class 'dict'>
# >>> None
Python 的内置函数 – range
range() 内置函数的功能:返回的是一个一定范围的可迭代对象(即可进行 for 循环),元素为整型。它不是列表,无法打印信息,但是可以循环。range() 函数一般帮助我们执行一定次数的循环而使用,比如设定循环5次。
range() 内置函数的用法:示例如下
for item in range(start, stop, step=1):
print(item)
# >>> start : 开始的数字,类似索引的左边
# >>> stop : 结束的数字,类似索引的右边
# >>> step : 跳步,类似索引中的第三个参数
# >>> 返回值 : 返回一个可迭代(循环的)以整型为主的对象
# >>> 需要注意的是 range() 也是 左含右不含的方式
test_int = range(5)
for item in test_int:
print(item)
# >>> 执行结果如下:
# >>> 0
# >>> 1
# >>> 2
# >>> 3
# >>> 4
else 在 for 循环中的使用
else 语句只能在 for 循环正常退出后执行
也就是说循环没有报错,没有中途停止的情况下, else 语句 才会发生作用
示例如下:
'''
for 变量 in 序列:
代码块 1
else:
代码块 2
'''
test_int = range(5)
for item in test_int:
print(item)
else:
print('for循环成功结束')
重点
若想执行 else 里面的代码块,必须是触达到循环条件且为假
如果在循环里面提前结束了循环(break),则不会执行 else 里面的代码块
for 循环删除列表元素的避坑指南
首先,我们定义一个列表,使用 for 循环 删除列表中偶数(即能够被2整除的元素)
test_list = [3, 6, 8, 9, 25, 36, 100, 105]
for item in test_list:
if item % 2 == 0:
test_list.remove(item)
print(test_list)
# 执行结果如下:
# >>> [3, 8, 9, 25, 100, 105]
这里我们会发现 元素 8 、元素 100 仍然存在,删除 偶数 元素的操作存在了遗漏。这是为什么呢?
其实,这是因为 remove() 函数在执行删除一个元素之后,后边的元素会自动补位到上一个被删除元素的位置上去。然而此时的 for 循环 在正向的往下运行,会略过这个补位的元素,由此就造成了遍历的遗漏。
所以正确的遍历代码如下:
test_list = [3, 6, 8, 9, 25, 36, 100, 105]
for item in test_list[::-1]:
if item % 2 == 0:
test_list.remove(item)
print(test_list)
# 执行结果如下:
# >>> [3, 9, 25, 105]
嵌套 for 循环
什么是嵌套 for 循环? —> 即 for 循环中还有 for 循环
示例如下:
for i in range(3):
for j in range(2):
print('内层循环:', j)
print('外层循环:', i)
# >>> 执行结果如下:
# >>> 内层循环: 0
# >>> 外层循环: 0
# >>> 内层循环: 1
# >>> 外层循环: 0
# >>> 内层循环: 0
# >>> 外层循环: 1
# >>> 内层循环: 1
# >>> 外层循环: 1
# >>> 内层循环: 0
# >>> 外层循环: 2
# >>> 内层循环: 1
# >>> 外层循环: 2
name = ['Neo', 'Jack', 'Lily']
age = [17, 18]
for a in name:
# print(a)
for b in age:
print('姓名:', a, '年龄:', b)
# >>> 执行结果如下:
# >>> 姓名: Neo 年龄: 17
# >>> 姓名: Neo 年龄: 18
# >>> 姓名: Jack 年龄: 17
# >>> 姓名: Jack 年龄: 18
# >>> 姓名: Lily 年龄: 17
# >>> 姓名: Lily 年龄: 18
while 循环
什么是 while 循环? —> 以一定条件为基础的循环,条件满足的情况下无限循环,条件不满足则退出循环。
while 循环 不依赖可迭代的数据类型,而 for 循环依赖。
while 循环的功能:在满足条件的情况下,会无限循环;不满足条件后,将停止循环。
while 循环的用法:示例如下
while bool_result:
do
# >>> bool_result : 布尔类型,此处与 if 语法完全一直
# >>> do : while 循环体的代码块;需要缩进
# >>> 返回值 : while 循环是语句,没有返回值
test_int = 1
while test_int < 5:
print(test_int, end='\n')
test_int += 1
# >>> 执行结果如下:
# >>> 1
# >>> 2
# >>> 3
# >>> 4
users_list = ['Neo', 'Jack', 'Lily', 'Adem']
index = 0
length = len(users_list)
while index <= length - 1:
print('当前循环到的用户名为:', users_list[index])
index += 1
print('while循环结束')
# >>> 执行结果如下:
# >>> 当前循环到的用户名为: Neo
# >>> 当前循环到的用户名为: Jack
# >>> 当前循环到的用户名为: Lily
# >>> 当前循环到的用户名为: Adem
# >>> while循环结束
注意:应避免 while True: 的情况,否则会进入死循环。
拓展:列表推导式
列表推导式也叫做列表解析式,是一种快速创建列表的简洁语法。
列表推导式以[]中括号为标志,一般由表达式、循环语句、条件语句组成(条件语句非必须)。
列表推导式 和 for 循环明显存在的关联,下面我们看一下对比。
# 20以内所有偶数的平方
list_1 = []
for x in range(20):
if x % 2 == 0:
list_1.append(x**2)
print(list_1)
# 运行结果:[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]
# 列表推导式,20以内所有偶数的平方
print([x ** 2 for x in range(20) if x % 2 == 0])
# 运行结果:[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]
列表推导式对 for 循环语句的格式做了一下简单的变形,并用 [ ] 括起来,最终将循环过程中计算表达式得到的一系列值组成一个列表。
常见的推导式方法
元组推导式如下:
# 元组推导式
t_1 = (x for x in range(10)) # 结果是生成器对象,使用tuple()函数将其转换为元组
print(tuple(t_1))
# 运行结果:(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
字典推导式如下:
# 字典推导式
print({x:x**2 for x in range(10)})
# 运行结果:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
集合推导式如下:
# 集合推导式
print({x for x in range(10)})
# 运行结果:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
循环的继续与退出(continue 与 break)
前面我们学习了 for 循环 与 while 循环 , 它们可以帮助我们自动处理一些业务。但是在循环中难免会出一些意外的状况,这个时候如果再继续循环下去,就会对我们的业务不利,这个时候就需要使用到 continue 、break 来帮助我们河狸的退出循环。
continue 的使用
continue 的功能:循环遇到 continue 将停止本次数据循环,进行下一次循环
continue 的用法:示例如下
while bool:
continue
for item in iterable:
continue
print(item)
# >>> continue : 属于语法,不需要加 () 即可执行;无参数
# >>> 返回值 : continue 是语法,没有返回值。
count = 1
while count < 5:
print(count)
continue
count += 1
# >>> 执行结果如下:
# >>> 1, 1, 1, 1, ... 无限循环,一直是1
break 的使用
break 的功能:是循环正常停止循环(遍历),这时如果循环配合了 else 语句,else语句将不执行。
break 的用法:示例如下
while bool:
break
for item in iterable
print(item)
break
# >>> break :属于语法,不需要加 () 即可执行;无参数。
# >>> 返回值 : break 是语法,没有返回值。
count = 1
while count < 5:
print(count)
count += 1
break
# >>> 执行结果如下:
# >>> 1
条件语句 与 continue、break 的关系
continu 与 break 通常伴随着循环语句中的条件语句,满足某些条件可以继续执行,不满足某些条件提前结束循环。
在 while 循环中,break 语句的优先权要大于 while 逻辑块的判断结果 (比如上文中的 count += 1)
示例如下:
count = 1
while count < 5:
print(count)
count += 1
if count == 2:
break
# >>> 执行结果如下:
# >>> 1
循环实现九九乘法表
代码示例如下:
# for 循环 实现九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print('{} * {} = {}'.format(i, j, i * j), end=' ')
print('')
# >>> 执行结果如下:
# >>> 1 * 1 = 1
# >>> 2 * 1 = 2 2 * 2 = 4
# >>> 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
# >>> 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
# >>> 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
# >>> 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
# >>> 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
# >>> 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
# >>> 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
# while 循环 实现九九乘法表
i = 0
j = 0
while i < 9:
i += 1
while j < 9:
j += 1
print('{} * {} = {}'.format(j, i, i * j), end=' ')
if i == j:
j = 0
print('')
break
# >>> 执行结果如下:
# >>> 1 * 1 = 1
# >>> 1 * 2 = 2 2 * 2 = 4
# >>> 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
# >>> 1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
# >>> 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
# >>> 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
# >>> 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
# >>> 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
# >>> 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
如何使用一行代码实现九九乘法表
print('\n'.join([' '.join(['{} * {} = {} '.format(item_1, item_2, item_1 * item_2) for item_2 in range(1, 10) if item_2 <= item_1]) for item_1 in range(1, 10)]))
# 利用了 列表推导式 及 列表转字符串
# 但使用这种方式的阅读性极差, 项目中绝不能使用
来源:https://blog.csdn.net/weixin_42250835/article/details/123302126
猜你喜欢
- 一、内存泄漏像Java程序一样,虽然Python本身也有垃圾回收的功能,但是同样也会产生内存泄漏的问题。对于一个用 python 实现的,长
- 前言LogEntry是在后台开发中经常用到的模块,它在admin是默认开启的。可以使用LogEntry模块记录所有用户的操作记录。一方面可以
- Python 列表(list):1.序列介绍: 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引
- 前言Matplotlib的可以把很多张图画到一个显示界面,在作对比分析的时候非常有用。对应的有plt的subplot和figure的add_
- python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍。下面主要会讲到在使用pytho
- 环境:Ubuntu14、Python3.4、Pycharm2018一、使用command=lambda: 的形式传参代码如下from tki
- 一 引入解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个
- 一、命令格式:定义变量名称条件函数用“:”作为结尾下一级命令用空格键缩进,默认使用Tab键因为这样比较明显例如:yongHuMing = i
- 前言在前一篇的博文中,我们详细讲解了傅里叶变换的原理以及使用Numpy库实现傅里叶变换。但是其实OpenCV有直接实现傅里叶变换的函数。在O
- 1、编写TCP服务器程序。2、获取浏览器发送的http请求消息数据。3、读取固定的页面数据,将页面数据组装成HTTP响应消息数据并发送给浏览
- 引言在这篇文章中,我将介绍如何使用YOLOv5构建一个佩戴安全帽检测和识别系统。这个系统可以实时检测图像上人物是否有未佩戴安全帽,并及时进行
- 前言:因为研究工作的需要,要更改激活函数以适应自己的网络模型,但是单纯的函数替换会训练导致不能收敛。这里还有些不清楚为什么,希望有人可以给出
- 本文实例为大家分享了python实现比较文件内容异同的具体代码,供大家参考,具体内容如下import sysimport difflibim
- 论坛里面有不少人在使用Javascript编写Asp,经常有人在论坛提问,为什么Asp对象在对比指定值时返回结果不对?现在在这里给大家写点关
- 众所周知,随着数据库体积的日益庞大,其备份文件的大小也水涨船高。虽然说通过差异备份与完全备份配套策略,可以大大的减小SQL Server数据
- 1、什么是全局变量?在Python中,全局变量指的是可以作用于函数内部和外部的变量。在这里有两种情况:在函数的外部定义和内部定义添加glob
- 一看,C盘只有不到2M可用空间,一查原因,sqlserver安装路径下的log目录文件占了好大,5G多, 于是上网搜了下,解决了: 把与sq
- pandas可以对不同索引的对象进行算术运算,如果存在不同的索引对,结果的索引就是该索引对的并集。一、算术运算a、series的加法运算 &
- 1、很多B2C或者淘宝的卖家反应,下单了但没有支付的占有率超过30%,有的甚至到40%。对于冲动性消费的商品来说,这个70%左右的转化率其实
- 如何创建列表,或生成列表。这里介绍在python的基础知识里创建或转变或生成列表的一些方法。零个,一个或一系列数据用逗号隔开,放在方括号[