![804e6fce8faa1b42ca6d035248030b69.png](https://img-blog.csdnimg.cn/img_convert/804e6fce8faa1b42ca6d035248030b69.png)
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了。
—— Carig Zerouni
目录
![a989a260eef71f6ac15cd1a425329a39.png](https://img-blog.csdnimg.cn/img_convert/a989a260eef71f6ac15cd1a425329a39.png)
前几节我们介绍了Python 中四种数据结构的特性和基本用法,本节介绍与数据结构相关的高级特性。
- 序列
- 迭代器
- 列表生成式
- 生成器
- 强制类型转换
1,序列
Python 序列是指,其中存放的元素是有序排列
的,可用下标访问,字符串
,列表
,元组
都是序列。
而字典
与集合
中的元素是无序排列的,因此一般不归在序列
中。
Python 序列有如下特点:
- 序列中的元素是
不可变
类型 - 序列中的元素可用
下标
访问,下标可正可负 - 可通过
切片
访问部分连续
元素 - 可进行
相加
,相乘
,in 运算
- 可通过
for 循环
遍历所有元素
可以使用collections
模块中的Sequence
类来查看一个对象是否是一个序列:
>>> isinstance('', collections.Sequence) # 字符串是序列
True
>>> isinstance([], collections.Sequence) # 列表是序列
True
>>> isinstance((), collections.Sequence) # 元组是序列
True
>>> isinstance({}, collections.Sequence) # 字典不是序列
False
>>> isinstance(set(), collections.Sequence) # 集合不是序列
False
提示:
1,isinstance
函数用于查看一个对象属于某个类
2,在使用模块
时,要先import
该模块
2,迭代器
可迭代类型
我们知道str
,list
,tuple
,dict
,set
都可用for 循环
来遍历,这个遍历的过程就是一个迭代
过程,这些类型都是可迭代
类型。
可迭代的类型,都实现了__iter__
方法,我们通过dir(可迭代对象)
,可以看到,可迭代对象的魔法方法
中都有一个__iter__
方法。
我们也可以通过collections
模块中的Iterable
类型来查看一个对象是不是可迭代对象:
>>> isinstance('', collections.Iterable)
True
>>> isinstance([], collections.Iterable)
True
>>> isinstance((), collections.Iterable)
True
>>> isinstance({}, collections.Iterable)
True
>>> isinstance(set(), collections.Iterable)
True
迭代器
迭代器
是一种可迭代
的对象。
迭代器一定是可迭代的,可迭代的对象不一定是迭代器。
迭代器要实现两个魔法方法:__iter__
和 __next__
。
通过collections
模块中的Iterator
类型来查看这两个方法:
>>> dir(collections.Iterator)
判断一个对象是不是迭代器:
>>> isinstance('', collections.Iterator) # 字符串不是迭代器
False
>>> isinstance([], collections.Iterator) # 列表不是迭代器
False
>>> isinstance((), collections.Iterator) # 元组不是迭代器
False
>>> isinstance({}, collections.Iterator) # 字典不是迭代器
False
>>> isinstance(set(), collections.Iterator) # 集合不是迭代器
False
迭代器通用函数
迭代器有一些通用函数,下面我们介绍一些常用的。
1.enumerate
函数
在Python3 中,enumerate
实际上是一个类
,可通过help(enumerate)
查看,也可以把它当做函数来使用。
其经常被用在for 循环
中,即可遍历下标,又能遍历数据。
作用: 用于给一个可迭代
的对象,添加下标
原型: enumerate(iterable[, start]) -> iterator 参数 iterable: 一个可迭代的对象 参数 start: 下标起始位置 返回值: 一个enumerate
对象,同时也是一个迭代器
示例:
>>> l = enumerate(['a', 'c', 'b']) # 参数是一个列表
>>> type(l)
<class 'enumerate'>
>>> isinstance(l, collections.Iterator) # 是一个迭代器
True
>>> for index, item in l: