【python基础】常见的数据结构的遍历

严格来说,任何实现了__iter__方法或__getitem__方法的对象都可以被遍历。

但是要注意,不是所有东西都适合遍历,比如数字(整数、浮点数)就不能直接遍历,除非将其包装成范围或序列。

在Python中,我们通常说"可迭代对象"(Iterable)是指那些能够一次返回一个元素的对象。例如,在for循环中,我们遍历的就是可迭代对象。

不是所有东西都可以直接遍历,但Python中大多数容器和序列都可以! 主要有以下几类可遍历的对象:

一、可以直接遍历的常见类型:

1. 字符串 - 遍历字符

python 复制代码
s = "hello"
for char in s:  # 'h' → 'e' → 'l' → 'l' → 'o'
    print(char)

2. 列表 - 遍历元素

python 复制代码
lst = [1, 2, 3]
for item in lst:  # 1 → 2 → 3
    print(item)

3. 元组 - 遍历元素

python 复制代码
tup = (1, 2, 3)
for item in tup:  # 1 → 2 → 3
    print(item)

4. 字典 - 默认遍历,也可遍历值或键值对

python 复制代码
d = {'a': 1, 'b': 2}

# 默认遍历键
for key in d:  # 'a' → 'b'
    print(key)

# 遍历值
for value in d.values():  # 1 → 2
    print(value)

# 遍历键值对
for key, value in d.items():  # ('a', 1) → ('b', 2)
    print(key, value)

5. 集合 - 遍历元素(无序)

python 复制代码
s = {1, 2, 3}
for item in s:  # 顺序不确定
    print(item)

6. range对象 - 遍历数字序列

python 复制代码
for i in range(5):  # 0 → 1 → 2 → 3 → 4
    print(i)

7. 文件对象 - 遍历行

python 复制代码
with open('file.txt') as f:
    for line in f:  # 一行一行读取
        print(line)

二、需要特殊方法才能遍历的:

8. enumerate对象 - 同时获取索引和值

python 复制代码
s = "abc"
for i, char in enumerate(s):  # (0,'a') → (1,'b') → (2,'c')
    print(i, char)

9. zip对象 - 同时遍历多个序列

python 复制代码
names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages):  # ("Alice",25) → ("Bob",30)
    print(name, age)

10. 生成器 - 惰性遍历

python 复制代码
# 生成器表达式
gen = (x*2 for x in range(3))  # 0 → 2 → 4
for num in gen:
    print(num)

三、不能直接遍历的常见类型:

1. 数字(整数、浮点数) - ❌ 不能遍历

python 复制代码
num = 123
for digit in num:  # ❌ TypeError: 'int' object is not iterable
    print(digit)

需要先转换:

python 复制代码
num = 123
for digit in str(num):  # '1' → '2' → '3'
    print(digit)

2. 布尔值 - ❌ 不能遍历

python 复制代码
flag = True
for item in flag:  # ❌ TypeError: 'bool' object is not iterable
    print(item)

3. None - ❌ 不能遍历

python 复制代码
value = None
for item in value:  # ❌ TypeError: 'NoneType' object is not iterable
    print(item)

4. 单个对象 - ❌ 需要容器包装

python 复制代码
obj = "I'm a string, but..."
for char in obj:  # ✅ 可以,因为字符串是可迭代的
    print(char)

num = 42
for item in num:  # ❌ 不行
    print(item)

# 需要包装成容器
for item in [num]:  # ✅ 可以
    print(item)

四、判断是否能遍历的技巧:

python 复制代码
from collections.abc import Iterable

print(isinstance("hello", Iterable))  # ✅ True
print(isinstance([1,2,3], Iterable))  # ✅ True
print(isinstance(123, Iterable))      # ❌ False
print(isinstance(True, Iterable))     # ❌ False
print(isinstance(None, Iterable))     # ❌ False

总结:

  • 可以遍历的:字符串、列表、元组、字典、集合、range、文件等容器
  • 不能直接遍历的:数字、布尔值、None等单一值
  • 核心原则:如果包含多个元素(序列、集合、映射),通常可以遍历;如果是单个值,通常不能直接遍历

记住:当你看到 for x in y: 时,y 必须是一个可迭代对象(包含多个元素)。

相关推荐
地球资源数据云3 分钟前
1900-2023年中国物种分布点位矢量数据集
大数据·数据结构·数据库·数据仓库·人工智能
c++之路12 分钟前
C++ 多线程
开发语言·c++
CHANG_THE_WORLD18 分钟前
<Fluent Python > Unicode 文本与字节
开发语言·python
测试员周周19 分钟前
【AI测试系统】第1篇:LangGraph 实战:用 State Graph 搭建 AI测试流水线(4 步编排 + RAG 增强 + 完整代码)
linux·windows·python·功能测试·microsoft·单元测试·多轮对话
AI人工智能+电脑小能手23 分钟前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
凯瑟琳.奥古斯特23 分钟前
Bootstrap快速上手指南
开发语言·前端·css·bootstrap·html
噜噜噜阿鲁~24 分钟前
python学习笔记 | 8.2、函数式编程-返回函数
笔记·python·学习
牢姐与蒯27 分钟前
cpp数据结构之map
数据结构
我就是妖怪36 分钟前
Kimi K2.6 智能效果实测与能力全景展示
开发语言
中二痞39 分钟前
下载Python 版本,环境变量变更以及PyCharm更换python版本
开发语言·python·pycharm