可迭代对象
概述
使用for...in...的循环语法,依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。
python中的可迭代对象
列表、集合、字符串、字典、元组,数字类型不可迭代(range(数字)是迭代对象)
isinstance方法
如何判断一个对象是否可以迭代可以使用isinstance()这个方法,使用前需要导入内置的方法collections中的Iterable这个方法,以方便我们进一步判断。
# coding:utf-8
from collections import Iterable
print("列表是可迭代对象:", isinstance([1, 3, 5], Iterable))
print("元组是可迭代对象:", isinstance((5, 6, 8), Iterable))
print("集合是可迭代对象:", isinstance({1, 3, 5}, Iterable))
print("字典是可迭代对象:", isinstance({"a":1, "b":2}, Iterable))
print("字符串是可迭代对象:", isinstance("suner", Iterable))
print("数字是可迭代对象:", isinstance(10, Iterable))
print("数字列表是可迭代对象:", isinstance(range(10), Iterable))
迭代器
概述
(1)迭代器是访问可迭代对象的工具
(2)iter(iterable) 从可迭代对象中返回一个迭代器,iterable 必须是能提供一个迭代器的对象(如列表、元组等可迭代对象)
next(iterator) 从迭代器iterator中获取下一个记录,如果无法获取下一条记录,则触发StopIteration异常
(3)迭代器只能向前取值,不会后退,用iter函数可以返回一个可迭代对象的迭代器
(4)迭代器不要求你事先准备好整个迭代过程中所有的元素。仅仅是在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁
示例
# coding:utf-8
L = ["aa", "bb", "cc", "dd"] # L列表为一个可迭代对象
l = iter(L) # 生成l迭代器
# next(iterator) 从迭代器返回下一个的值
print(next(l)) # 取出第一个迭代器的值
print(next(l)) # 取出第二个迭代器的值
print(next(l)) # 取出第三个迭代器的值
print(next(l)) # 取出第四个迭代器的值
# print(next(l)) # 列表长度只有4,再取会报StopIteration异常
示例代码优化
# coding:utf-8
L = ["aa", "bb", "cc", "dd"] # L列表为一个可迭代对象
l = iter(L) # 生成l迭代器
# while True本是死循环,但在与迭代器一起使用时,做了相应封装处理,不会一直循环下去
while True:
try:
print(next(l))
except StopIteration:
print("循环结束")
break