②Python高级特性
- 迭代器
切片
取list和tuple的部分元素的常见操作,是Python的一个高级特性。
具体用法如下所示:
迭代
- 1 .如果给定一个list或tuple,可以通过
for
循环来遍历这个list或tuple,这种遍历称为迭代(Iteration)
- 2.如何判断一个对象是否是可迭代对象?
使用collections模块的Iterable类型判断
- 3.Python内置的
enumerate
函数
enumernate
函数可以把一个list变成索引-元素对,这样就可以在for
循环中同时迭代索引和元素本身
列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
假如有一个列表list_1=[1,2,3,4,5]
,想要求解这个列表每个元素的平方值,那么应该怎么做呢?
传统的方式可能是通过循环的方式:
但是循环太繁琐,而列表生成式正是解决这种问题的利器。
这种生成出来的列表是一次性全部生成出来,不是惰性序列。
还可以在for
循环后面加上if
条件,进行元素的筛选。
还可以使用两层循环,可以生成全排列
if…else…
使用列表生成式的时候,会出现一些混淆。
上面if
语句之后不能加else
,会发生语法错误。
但是可以把if...else
写在前面
写在前面的if
必须加else
。
这是因为for
前面是表达式,后面是筛选条件。表达式的话必须是if...else
,筛选条件只能是if
。
生成器
- 1.通过列表生成式可以直接创建一个列表,但是受到内存限制,列表容量有限。创建一个包含100万元素的列表,不仅占用很大的存储空间,而且假如仅仅访问列表中几个元素的话,会造成很大的空间浪费。
- 2.如果列表元素可以按照某种算法推算出来,那么就可以在循环的过程中不断推算出后续元素,从而不必创建完整的list,节省大量的空间。这种生成列表的方式成为生成器:generator。
- 3.generator的创建方式有两种。
- 第一种方式很简单,就是将列表生成式中的
[]
改为()
,就创建了一个生成器,这种生成器是一个惰性序列。可以通过next()
函数获得generator的下一个返回值。
- 第二种是函数,如果一个函数中包含
yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator。
函数执行到yield
语句就会返回,再次执行时从上次返回的yield
语句处继续执行。
迭代器
- 1.凡是可作用于
for
循环对象的都是Iterable
类型;凡是可作用于next()
函数的对象都是Iterable
类型,它们表示一个惰性计算的序列; - 2.集合数据类型如
list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。Python的for
循环本质上就是通过不断调用next()
函数实现的。