在Python中有其特有的特性,用于提高开发效率,下面介绍几个包括切片,迭代,列表生成式,生成器,迭代器。
-
切片
- 索引方式
- 主要包括正索引和负索引一般是object[a:b:c=1]三个参数,前俩个是位置参数,第三个是默认参数。
- 切片的几种方式例如a=[1,2,3,4,5,6,7]
- 单个切片a[1]
- 全部切片a[:]从左往右,a[::]从左往右,a[::-1]从右往左(步长决定从左到右或者从右到左,为-1时候就是倒序)
- 索引为正a[:3],a[:3:-1]倒序从7倒3但是不含3,切片包左不包右,如果切片超出就会返回空。
- 索引都为负和为正一样,只是注意步长是否是-1。
- 索引有正也有负的时候,也是同样道理主要还是看好是从左往右还是从右往左,然后对应好索引就可以。
- 连续切片操作a[:][1,4][2]
- 切片参数可以使用表达式a[1+1:8/2]
- 元组,字符串等都可以进行切片操作。
- 切片常用操作,取奇数偶数a[1::2],a=[::2],拷贝对象b=a[:],修改元素a[1:4]=['a','b']。
-
迭代
- 主要是对for 的应用,目前Python 有很多对象可以进行迭代如list,tuple,字符串等
def first(): for a in 'ABF': print(a) first()
- 判断一个对象是否可以迭代,可以使用collection模块中的iterable进行判断。
- 如果需要对list 的索引及元素进行迭代,目前可以使用Python 中的enumerate
def b(): for a,b in enumerate([4,5,68]): print(a,b) b()
- 迭代dict如果只写一个值那么就只遍历Key,如果写俩个值就会遍历俩个。
-
列表生成式
- 在Python 中创建一个列表主要使用的是列表生成器,例如
def b(): for a in enumerate([cc for cc in range(23)]): print(a) b()
-
生成器也可以做判断
def b(): for a in enumerate([cc for cc in range(2,23) if cc % 2==0]): print(a) b()
-
生成器可以使用俩个for进行生成列表
def b(): for a in [cc+dd for cc in range(2,23) if cc % 2==0 for dd in range(3,24) if dd % 2 !=0]: print(a) b()
-
也可以使用for 进行对dict 的遍历形成列表。
def c(): for a in [b+'='+c for b,c in {'name':'chenhui','age':'23'}.items()]: print(a)
-
生成器
- 生成器的产生主要是因为创建列表生成器如果元素太多占用太多内存,不够优化。也有是因为无法使用for进行生成,算法比较复杂的时候使用,生成器主要保存的是算法不是元素。
- 创建生成器就是把列表表达式的[ ]改为()就例如a=(v*2 for v in range(1,10) )这个生成器可以使用next(a),还可以使用for进行迭代。
- 使用yielt 创建生成器generator function
def d (max): a,b,c=0,0,1 while a<max: yield c b,c=b,b+c a=a+1 return 'done' if __name__ == '__main__': print([a for a in d(9)])
-
迭代器
- 生成器都是
Iterator
对象,但list
、dict
、str
虽然是Iterable
,却不是Iterator
。 - 如果要使list,dict,str 变为Iterator则使用iter([])
print(iter(['a','b']))