一、Iterable可迭代类型
在Python中,Iterable(可迭代类型)是一个非常重要的概念,它指的是可以被迭代(即依次处理其中的元素)的对象。这些对象通常拥有一个__iter__()
方法,该方法会返回一个迭代器(Iterator),迭代器则通过其__
next__()
(在Python 2中是next()
)方法按顺序返回容器中的元素,直到所有元素被遍历完毕。
Python中的很多内置类型都是可迭代的,包括但不限于:
- 列表(List)
- 元组(Tuple)
- 字典(Dictionary,但迭代的是其键的视图)
- 集合(Set)
- 字符串(String)
- 生成器(Generator)
- 文件对象(用于读取时)
- 以及其他任何实现了
__iter__()
方法的自定义对象
举例说明:
# 使用列表作为可迭代对象
my_list = [1, 2, 3, 4, 5]
# 获取迭代器
my_iterator = iter(my_list)
# 使用next()遍历迭代器
while True:
try:
# 获取下一个元素
element = next(my_iterator)
print(element)
except StopIteration:
# 如果没有元素了,则StopIteration异常被抛出
break
# 或者使用for循环,它会自动处理StopIteration异常
for element in my_list:
print(element)
可迭代类型都可以使用len()获取长度:
print(len(range(10)))
注意事项
- 迭代器是单向的,并且只能遍历一次。这意味着一旦迭代器的元素被遍历完,它就不能再从头开始遍历了。如果需要再次遍历,必须重新创建一个新的迭代器。
- 虽然大多数时候我们直接使用for循环等高级语法来遍历可迭代对象,但了解迭代器和可迭代对象的底层原理对于深入理解Python的迭代机制非常有帮助。
二、 for的两种常见形式
for循环的两种常见形式主要基于其遍历的对象类型,但本质上它们都是迭代过程的不同应用。以下是两种常见的for循环形式:
1.range可以提供循环变量 把range中的每一个元素依次赋予i
for i in range(3,5):
print(f"wwww{i}")
需要注意的是 for i in range(len(字符串)) 其中的i代表字符串中字符的索引
2.将字符串中的每个字符依次赋值给char
for char in "abcdefghijklmn":
print(char)
需要注意的是,尽管这两种形式在使用上有所不同,但它们都是for
循环在Python中的常见用法,展示了for
循环在遍历不同类型数据和执行基于范围的迭代时的灵活性。
三、 break与continue
1.break
break是停止循环,执行循环结束后的代码
for i in range(1, 6):
if i == 3:
break # 当i等于3时,退出循环
print(i)
# 输出:1 2
2.continue
continue是跳过本次循环,执行下一次循环,注意是并没有结束循环
for i in range(1, 6):
if i % 2 == 0:
continue # 如果i是偶数,跳过本次循环的剩余部分
print(i)
# 输出:1 3 5
四、 for与else
如果for中执行了break就不再执行else,也就是for循环意外结束
如果for循环正常结束,没有执行break,执行else,意思是break 与 for 不能同时执行,二者选其一
for i in range(1, 6):
if i == 3:
break
print(i)
else:
print("哇哇哇")
for i in range(1, 6):
print(i)
else:
print("程序正常结束!")
五、 循环嵌套
- 外层循环:最外层的循环,通常控制较大的迭代范围或数据集。
- 内层循环:嵌套在外层循环内部的循环,其执行次数或范围可能依赖于外层循环的当前迭代值
总结下来就是,外层循环变化一次 内层循环变化一轮
# 定义一个二维数组(矩阵)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 使用嵌套循环遍历矩阵
for i in range(len(matrix)): # 外层循环遍历行
for j in range(len(matrix[i])): # 内层循环遍历列
print(matrix[i][j], end=" ")
print() # 换行,以便更清晰地查看矩阵结构
输出:
1 2 3
4 5 6
7 8 9
通过合理使用循环嵌套,可以有效地处理各种复杂的遍历和迭代任务。
总结
以上就是我这个萌新小白对python循环的理解,有不足之处还请多多指教,我们下期再见!