关于python的迭代

525 词

名词

  • 循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while 语句。
  • 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for 语句。
  • 递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。
  • 遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。

名词引用: python 在线手册 by: PythonTab

现在只学迭代的基本

iter

生成迭代器(可迭代的变量)

语法:iter(object)
  • object 是一个可迭代对象,可以是列表、字符串、字典等。
1
2
3
4
from collections.abc import Iterable  # 导入可迭代的类型Iterable,来判断是否可以迭代。

a = iter([1, 2, 3, 4, 5])
print(isinstance(a, Iterable)) # True

next

语法:next(iterator, default)
  • iterator:从中检索下一个项目的迭代器。
  • default(可选):如果迭代器耗尽(没有下一个项目),则返回此值。
1
2
3
4
5
a = iter([1, 2, 3]) # 使用iter生成一个迭代器。

for i in a:
print(i)
print(next(a, "没有了")) # 默认输出"没有了"
输出结果
1
2
3
4
1
2
3
没有了

for已经把a迭代完了,轮到next的时候就已经没有了。

如果不写next的返回值就会报以下错误

error
1
2
3
4
Traceback (most recent call last):
File "c:\文件\Code\python\test.py", line 10, in <module>
print(next(a))
StopIteration # 停止迭代

来看下一个例子

1
2
3
4
a = iter([1, 2, 3])
print(next(a)) # 1
for i in a:
print(i) # 2, 3

next 输出了 1,for 输出了 2, 3。

输出结果
1
2
3
1
2
3

为什么 for 开始会输出 2 不是 1 呢?

第一次使用 next(a)时,迭代器 a 返回了列表的第一个元素,也就是 1,然后使用 for 循环遍历 a 时,迭代器从它停止的地方继续,也就是从第二个元素开始,所以它打印出了 2, 3。

因为迭代器已经"记住"了它在哪里停止,并从那里继续。

留言