OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4406|回复: 1

Python入门--for...遍历循环

[复制链接]

143

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
585
金钱
585
注册时间
2020-5-25
在线时间
42 小时
发表于 2020-9-21 13:48:37 | 显示全部楼层 |阅读模式
一、for 循环简介
for 为遍历循环,可以遍历任何序列,如 list,tuple,迭代器等。
for 的语句格式如下:
for  <变量>   in   <循环序列>:
        【循环体】
释:通过 for 循环依次将 <循环序列> 中的数据取出赋值给 <变量>,再通过【循环体】进行处理。
示例1:for 循环访问列表
# for 循环访问列表
list = ['woodman', 'Alan', 'Bobo']
for name in list:
    print(name)
输出结果:
woodman
Alan
Bobo
注意: name 这个变量是在 for 循环中定义的,意思是,依次取出 list 中的每一个元素,并把元素赋值给 name,然后执行for循环体。
示例2: for 循环访问字典
dict = {'woodman': 98, 'Alan': 89, 'Bobo': 56}
for key, value in dict.items():
    print(key, value)
输出结果:
Alan 89
woodman 98
Bobo 56
示例3: for 循环访问字符串
# for 循环访问字符串,可以依次读取每个字符
for char in 'woodman木头人':
    print(char)
输出结果:
w
o
......

注意:中文字符占2~3个字节(由编码决定,utf-8占3字节),每个中文字符是一个值
二、for ... else ... (比较少用到)
for ... else ... 格式:
for  <变量>   in   <循环序列>:
        【循环体】
else:
         【else的语句块】
释:for 遍历序列,无 break 结束当前循环,循环结束后执行 else 语句块
示例1:
list = ['woodman', 'Alan', 'Bobo']
for name in list:
    print(name)
else:
    print('循环完整结束后执行')
输出结果:
woodman
Alan
Bobo
循环完整结束后执行
示例2:
list = ['woodman', 'Alan', 'Bobo']
for name in list:
    print(name)
    if name == 'Alan':
        break  # break 结束循环,for 下的 else 也不会执行
else:
    print('循环完整结束后执行')
输出结果:
woodman
Alan
示例3:
list = ['woodman', 'Alan', 'Bobo']
for name in list:
    if name == 'Alan':
        continue  # continue 跳过本次循环,进入下一次循环
    print(name)  # 如果被 continue 本条语句不会执行
else:
    print('循环完整结束后执行')
输出结果:
woodman
Bobo
循环完整结束后执行
注意:continue 只是跳过本次循环,循环结束后 else 语句块最后被执行
三、for 循环嵌套
循环嵌套为循环中嵌套另外一层循环。
for <外层循环变量> in <外层循环序列>:
     for <内层循环变量> in <内层循环序列>:
         内层循环体
     外层循环体
这个只是一个for 与 for 的循环嵌套,你可以使用 for 与 while 嵌套。
循环嵌套经典示例1:倒三角的九九乘法表
# 九九乘法表 倒三角,你可以试试输出正三角
for i in range(1, 10): # range()请看本章第五部分
    for j in range(i, 10):
        print('%d * %d = %d' % (i, j, i * j), end='\t')
    print('')  # 控制换行
循环嵌套经典示例2:冒泡排序
# 冒泡排序
list = [9, 2, 7, 4, 5, 6, 3, 8, 1, 10]
length = len(list)
for i in range(length):
    for j in range(length - i):
        if list[length - j - 1] < list[length - j - 2]:
            list[length - j - 1], list[length - j - 2] = list[length - j - 2], list[length - j - 1]
print(list)四、for循环访问迭代对象
1、迭代器简介
Python 的 for 循环不仅可以用在 list 或 tuple 上,还可以作用在其他任何可迭代对象上。
迭代操作就是对于一个集合操作,无论该集合是有序还是无序,我们用 for 循环总是能依次取出集合中的每一个元素。
释义: 集合是指包含一组元素的数据结构,它包括:
有序集合:list,tuple,str和unicode;
无序集合:set
无序集合并且具有 key-value 对:dict(Python3.6后字典为有序)
迭代器有两个基本的方法:iter() 和 next()
iter() 创建一个迭代器
next() 访问迭代元素,访问后指针向下移一行
示例:
>>>list=[0,1,2,3,4]
>>> it = iter(list)  # 创建迭代对象
>>> print (next(it))  # 访问当前指针元素,结束后指针向下移一步
0
>>> print (next(it)) #
1
>>>
2、for循环访问迭代器
示例:
list = ['woodman', 'Alan', 'Bobo']
it = iter(list)  # 创建迭代器对象
for name in it:  # 循环访问迭代器
    print(name)
注意:迭代器访问数据比通过索引循环访问速度更快,数据量大时一般会使用迭代器
五、range ( ) 类控制循环访问
range ( ) 为 Python 的自有类,range() 带有内置的迭代方法__iter__() 和 __next()__ ,它是一个可迭代对象,我们可以通过 for 访问 range() 创建的迭代器。
range 类初始化参数说明:
range(stop) 从0开始到stop结束(不包含 stop)返回一个产生整数序列的迭代对象
range(start, stop[, step]) 从 start 开始到 stop 结束(不包含 stop)返回一个整数序列的迭代对象, step 为他的步长
示例1:
for i in range(5):
    print(i, end='-')
输出:0-1-2-3-4-
示例2 :
for i in range(1,5):
    print(i, end='-')
输出:1-2-3-4-
示例3:
for i in range(1,5,2):
    print(i, end='-')
输出:1-3-
示例4:
for i in range(-1,-5,-2):
    print(i)
输出结果
-1
-3
注意:start, stop, step 三个参数可以为负数
示例5:
# 结合range()和len()函数以遍历一个序列的索引,如下所示.
list = ['woodman', 'Alan', 'Bobo']
for i in range(len(list)):
    print(i,list)
输出结果:
0 woodman
1 Alan
2 Bobo
注意:for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict 等,任何可迭代对象都可以作用于 for 循环,而内部如何迭代我们通常并不用关心。
通常可迭代对象一般具备 iter() 和 next() 方法或者 __iter__() 和 __next()__ 方法。
有相同爱好的可以进来一起讨论哦:企鹅群号:1046795523



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

205

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2015-3-3
在线时间
127 小时
发表于 2020-9-21 15:05:10 | 显示全部楼层
好东西,收藏了,谢谢。
海纳百川者,荣耀伴一生!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表