严格来说,任何实现了__iter__方法或__getitem__方法的对象都可以被遍历。
但是要注意,不是所有东西都适合遍历,比如数字(整数、浮点数)就不能直接遍历,除非将其包装成范围或序列。
在python中,我们通常说“可迭代对象”(iterable)是指那些能够一次返回一个元素的对象。例如,在for循环中,我们遍历的就是可迭代对象。
不是所有东西都可以直接遍历,但python中大多数容器和序列都可以! 主要有以下几类可遍历的对象:
一、可以直接遍历的常见类型:
1.字符串- 遍历字符
s = "hello"
for char in s: # 'h' → 'e' → 'l' → 'l' → 'o'
print(char)
2.列表- 遍历元素
lst = [1, 2, 3]
for item in lst: # 1 → 2 → 3
print(item)
3.元组- 遍历元素
tup = (1, 2, 3)
for item in tup: # 1 → 2 → 3
print(item)
4.字典- 默认遍历键,也可遍历值或键值对
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.集合- 遍历元素(无序)
s = {1, 2, 3}
for item in s: # 顺序不确定
print(item)
6.range对象- 遍历数字序列
for i in range(5): # 0 → 1 → 2 → 3 → 4
print(i)
7.文件对象- 遍历行
with open('file.txt') as f:
for line in f: # 一行一行读取
print(line)
二、需要特殊方法才能遍历的:
8.enumerate对象- 同时获取索引和值
s = "abc"
for i, char in enumerate(s): # (0,'a') → (1,'b') → (2,'c')
print(i, char)
9.zip对象- 同时遍历多个序列
names = ["alice", "bob"]
ages = [25, 30]
for name, age in zip(names, ages): # ("alice",25) → ("bob",30)
print(name, age)
10.生成器- 惰性遍历
# 生成器表达式
gen = (x*2 for x in range(3)) # 0 → 2 → 4
for num in gen:
print(num)
三、不能直接遍历的常见类型:
1.数字(整数、浮点数)- ❌ 不能遍历
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)
2.布尔值- ❌ 不能遍历
flag = true
for item in flag: # ❌ typeerror: 'bool' object is not iterable
print(item)
3.none- ❌ 不能遍历
value = none
for item in value: # ❌ typeerror: 'nonetype' object is not iterable
print(item)
4.单个对象- ❌ 需要容器包装
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数据结构的遍历内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论