1. 什么是迭代
迭代(Iteration)是一种操作,通过循环依次访问集合中的每个元素。在 Python 中,最常用的迭代方式是 for
循环。
例如,给定一个列表(list)或元组(tuple),我们可以通过 for
循环遍历这些数据结构中的每个元素。实际上,Python 的 for
循环不仅可以作用于列表和元组,还可以作用于任何可迭代对象(如字符串、集合等)。
【注意】:
在 Python 中,可迭代对象包括以下几种:
-
有序集合:列表(list)、元组(tuple)、字符串(str)。
-
无序集合:集合(set)。
-
键值对集合:字典(dict)。
练习:
请用 for
循环迭代数列 1 到 100,并打印出 7 的倍数。
for i in range(1, 101):
if i % 7 == 0:
print(i)
2. 索引迭代
在 Python 中,for
循环默认迭代的是元素本身,而非元素的索引。如果需要同时获取索引和元素,可以使用 enumerate()
函数。
2.1 enumerate()
函数
enumerate()
函数可以将一个可迭代对象(如列表)转换为一个包含索引和元素的元组序列。例如:
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L):
print(index, '-', name)
enumerate()
函数将列表 L
转换为类似以下的元组序列:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
练习:
在迭代 ['Adam', 'Lisa', 'Bart', 'Paul']
时,如果我们想打印出名次 - 名字(名次从 1 开始):
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L, start=1):
print(index, '-', name)
或者使用 zip()
函数和 range()
函数:
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in zip(range(1, len(L) + 1), L):
print(index, '-', name)
3. 迭代字典的值
字典(dict)本身是一个可迭代对象,通过 for
循环直接迭代字典时,每次获取的是字典的键(key)。如果需要迭代字典的值(value),可以使用以下方法:
3.1 values()
方法
在 Python 3 中,values()
方法返回一个动态视图(view),而不是一个完整的列表。这意味着它不会一次性生成所有值,而是在迭代时逐个返回值,从而节省内存。
语法
dict.values()
示例 1:迭代字典的值
# 定义一个字典
d = {'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74}
# 使用 values() 方法迭代字典的值
for value in d.values():
print(value)
输出:
95
85
59
74
【注】 在 Python 3 中,itervalues()
方法已经被移除
4. 迭代字典的键和值
在一个 for
循环中,可以同时迭代字典的键(key)和值(value)。字典的 items()
方法可以将字典转换为一个包含 (key, value)
元组的列表,从而实现同时迭代键和值:
d = {'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74}
for key, value in d.items():
print(key, ":", value)
类似地,iteritems()
方法(Python 2)在迭代过程中逐个返回 (key, value)
元组,节省内存。在 Python 3 中,items()
方法的行为类似于 iteritems()
。
练习:
请根据字典:
d = {'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74}
打印出每个同学的分数,并计算平均分。
scores = list(d.values())
average = sum(scores) / len(scores)
print("Average:", average)
for key, value in d.items():
print(key, ":", value)