8️⃣ 高级特性—— 迭代(Iteration)

发布于:2025-07-28 ⋅ 阅读:(22) ⋅ 点赞:(0)

在Python中,迭代(Iteration)是遍历数据的常用方式,通常通过for ... in结构实现。它比传统的基于下标的循环(如C语言中的for(i=0; i<n; i++))更加灵活和简洁。

1. 迭代可迭代对象

Python中的for循环不仅可以遍历listtuple,还可以遍历其他所有可迭代对象,比如dict和字符串。

# 迭代list
for item in [1, 2, 3]:
    print(item)

# 迭代字符串
for ch in 'ABC':
    print(ch)

# 迭代字典(默认迭代键)
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print(key)

"""
Python 的字典对象实现了一个特殊的迭代方法 __iter__(),它默认返回的是 .keys() 的迭代器。
所以这几种写法的效果是一样的(都遍历字典的键):

for key in d:
for key in d.keys():
for key in dict.__iter__(d):

"""
  • 字典默认迭代的是,如果要迭代值或键值对,可以使用:

    • d.values()遍历所有值

    • d.items()遍历键值对

& 小结(对比表)

语法 遍历内容
for k in d: 键(默认)
for v in d.values():
for k, v in d.items(): 键值对(元组)

2. 如何判断对象是否可迭代?

        可以使用collections.abc模块的Iterable类型判断:

from collections.abc import Iterable

print(isinstance('abc', Iterable))    # True,字符串可迭代
print(isinstance([1,2,3], Iterable))  # True,列表可迭代
print(isinstance(123, Iterable))      # False,整数不可迭代

3. 同时获取索引和值 —— enumerate

Python内置函数enumerate可以同时获得元素的索引和值,非常方便:

for index, value in enumerate(['A', 'B', 'C']):
    print(index, value)

"""
    输出:
        0 A
        1 B
        2 C
"""

这类似于Java等语言中的带下标遍历,写法更简洁。

4. 多变量解包

在 Python 中,当一个可迭代对象(如列表、元组)的元素是长度固定的元组 / 列表时,可以在循环中直接用对应数量的变量接收元素,这种方式称为 “解包”。例如:

  • 若列表元素是 3 元素元组,可写成 for a, b, c in list:
  • 本质是简化了 “先获取整个元组,再通过索引取值” 的过程(如 for item in list: x=item[0]; y=item[1])。
# for循环中支持同时赋值多个变量,如遍历元组列表:

for x, y in [(1, 1), (2, 4), (3, 9)]:
    print(x, y)

"""
    输出:
        1 1
        2 4
        3 9
"""

总结:Python的迭代机制极大简化了循环操作,for ... in适用于各种可迭代对象,并支持同时获取索引和值,写法简洁、可读性强,极大提升了开发效率。

5. 使用迭代查找一个list中最小和最大值,并返回一个tuple:

def findMinAndMax(L):
    if not L:  # 空列表返回 (None, None)
        return (None, None)
    min = max = L[0]  # 初始化最小值和最大值为第一个元素
    for x in L:
        if x < min:
            min = x
        elif x > max:
            max = x
    return (min, max)

# 测试
if findMinAndMax([]) != (None, None):
    print('测试失败!')
elif findMinAndMax([7]) != (7, 7):
    print('测试失败!')
elif findMinAndMax([7, 1]) != (1, 7):
    print('测试失败!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
    print('测试失败!')
else:
    print('测试成功!')


网站公告

今日签到

点亮在社区的每一天
去签到