文章目录
- s = “hello” for char in s: # ‘h’ → ‘e’ → ‘l’ → ‘l’ → ‘o’ print(char)
- lst = [1, 2, 3] for item in lst: # 1 → 2 → 3 print(item)
- tup = (1, 2, 3) for item in tup: # 1 → 2 → 3 print(item)
- 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)
- s = {1, 2, 3} for item in s: # 顺序不确定 print(item)
- for i in range(5): # 0 → 1 → 2 → 3 → 4 print(i)
- with open(‘file.txt’) as f: for line in f: # 一行一行读取 print(line)
- num = 123 for digit in num: # ❌ TypeError: ‘int’ object is not iterable print(digit) 需要先转换: num = 123 for digit in str(num): # ‘1’ → ‘2’ → ‘3’ print(digit)
- flag = True for item in flag: # ❌ TypeError: ‘bool’ object is not iterable print(item)
- value = None for item in value: # ❌ TypeError: ‘NoneType’ object is not iterable print(item)
- 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)
目录
- 一、可以直接遍历的常见类型:
- 1.字符串- 遍历字符
- 2.列表- 遍历元素
- 3.元组- 遍历元素
- 4.字典- 默认遍历键,也可遍历值或键值对
- 5.集合- 遍历元素(无序)
- 6.range对象- 遍历数字序列
- 7.文件对象- 遍历行
- 二、需要特殊方法才能遍历的:
- 8.enumerate对象- 同时获取索引和值
- 9.zip对象- 同时遍历多个序列
- 10.生成器- 惰性遍历
- 三、不能直接遍历的常见类型:
- 1.数字(整数、浮点数)- ❌ 不能遍历
- 2.布尔值- ❌ 不能遍历
- 3.None- ❌ 不能遍历
- 4.单个对象- ❌ 需要容器包装
- 四、判断是否能遍历的技巧:
- 总结:
严格来说,任何实现了__iter__方法或__getitem__方法的对象都可以被遍历。
但是要注意,不是所有东西都适合遍历,比如数字(整数、浮点数)就不能直接遍历,除非将其包装成范围或序列。
在Python中,我们通常说“可迭代对象”(Iterable)是指那些能够一次返回一个元素的对象。例如,在for循环中,我们遍历的就是可迭代对象。
不是所有东西都可以直接遍历,但Python中大多数容器和序列都可以! 主要有以下几类可遍历的对象:
s = "hello"
for char in s: # 'h' → 'e' → 'l' → 'l' → 'o'
print(char)
lst = [1, 2, 3]
for item in lst: # 1 → 2 → 3
print(item)
tup = (1, 2, 3)
for item in tup: # 1 → 2 → 3
print(item)
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)
s = {1, 2, 3}
for item in s: # 顺序不确定
print(item)
for i in range(5): # 0 → 1 → 2 → 3 → 4
print(i)
with open('file.txt') as f:
for line in f: # 一行一行读取
print(line)
s = "abc"
for i, char in enumerate(s): # (0,'a') → (1,'b') → (2,'c')
print(i, char)
names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages): # ("Alice",25) → ("Bob",30)
print(name, age)
# 生成器表达式
gen = (x*2 for x in range(3)) # 0 → 2 → 4
for num in gen:
print(num)
num = 123
for digit in num: # ❌ TypeError: 'int' object is not iterable
print(digit)
需要先转换:
num = 123
for digit in str(num): # '1' → '2' → '3'
print(digit)
flag = True
for item in flag: # ❌ TypeError: 'bool' object is not iterable
print(item)
value = None
for item in value: # ❌ TypeError: 'NoneType' object is not iterable
print(item)
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)
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 必须是一个可迭代对象(包含多个元素)。
到此这篇关于Python常见的数据结构的遍历的文章就介绍到这了,更多相关python数据结构的遍历内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python数据结构与算法之二叉树结构定义与遍历方法详解
- python数据结构之二叉树的遍历实例
- 浅谈python数据结构之动态规划
- 关于Python的高级数据结构与算法
- Python数据结构队列解决约瑟夫斯问题
- python常用数据结构集合详解
- python常用数据结构元组详解
- Python数据结构之递归方法详解
- Python数据结构之队列详解