迭代
1. 什么是迭代
- 迭代(Iteration):通过
for循环遍历 list 或 tuple 等序列,逐个访问元素。 - Python 用
for ... in完成迭代;很多语言(如 C)用下标for (i=0; i<length; i++)访问list[i]。 - Python 的 for 抽象程度更高:不仅可用于 list、tuple,还可作用于任何可迭代对象,不依赖下标。
2. 可迭代对象
- 可迭代对象:能用
for ... in遍历的对象;有无下标都可以,只要可迭代即可。 - list、tuple 有下标;dict、字符串等没有下标,但都可被
for遍历。
3. dict 的迭代
- 默认:
for key in d迭代的是 key;dict 内部无序,迭代顺序可能与插入顺 序不一致。 - 迭代 value:
for value in d.values()。 - 同时迭代 key 和 value:
for k, v in d.items()。
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print(key) # a, c, b(顺序可能不同)
for value in d.values():
print(value) # 1, 2, 3
for k, v in d.items():
print(k, v) # a 1, b 2, c 3
4. 字符串的迭代
- 字符串也是可迭代对象,每个元素是字符;可直接
for ch in 'ABC'。
for ch in 'ABC':
print(ch) # A B C
5. 判断是否可迭代
- 使用
collections.abc.Iterable:isinstance(obj, Iterable)为 True 表示可迭代。
from collections.abc import Iterable
isinstance('abc', Iterable) # True
isinstance([1, 2, 3], Iterable) # True
isinstance(123, Iterable) # False
6. 下标循环:enumerate
- 若要对 list 实现**“索引 + 元素”**的循环(类似 Java 的下标循环),用内置
enumerate:把 list 变成 (索引, 元素) 对。
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
# 0 A
# 1 B
# 2 C
- 多变量:
for可同时解包多个变量,如for x, y in [(1,1), (2,4), (3,9)]: print(x, y)。
小结
| 要点 | 说明 |
|---|---|
| 迭代 | for ... in 遍历;不依赖下标,作用于可迭代对象即可 |
| dict | 默认迭代 key;.values() 迭代 value;.items() 迭代 (k,v) |
| 字符串 | 可迭代,按字符遍历 |
| 是否可迭代 | isinstance(obj, Iterable)(需 from collections.abc import Iterable) |
| 下标+元素 | enumerate(list) 得到 (索引, 元素),便于在 for 中同时用下标和值 |
记忆:能 for x in 某对象 的,就是可迭代对象;要下标用 enumerate。
练习:用迭代实现 findMinAndMax(L),返回 list 中最小值和最大值的 tuple;空 list 返回 (None, None)。