python高级特性

切片:用于取一个list或tuple的部分元素;
L = ['Michael','Sarah','Tracy','Bob','Jack']
L[0:3]        //表示从索引0开始取,直到索引3为止,但不包括索引3,即索引0,1,2;正好是三个元素;
L[:3]         //如果第一个索引是0,还可以省略;
L[1:3]        //从索引1开始,到3-1结束;
L[-2:]        //从倒数第二个元素开始取,取完元素;
L[-2:-1]      //从倒数第二个元素开始取,取到倒数第一个元素;
好,现在我们再加强一下这个处理方式,我们还想要更多的功能,例如,每两个取一个;
L = list(range(100))
L[:10:2]        //从索引0开始取,(从这里也可以看出,range(100)是指从0到100-1),取到10-1,然后每两个取1个,也就是0,2,4,6,8
而字符串也可以呀看成是一种list,每个元素就是一个字符。也可以用切片操作,
'ABCDEFG'[0,3]    //'ABC'
'ABCDEFG'[::2]    //'ACEG'

迭代:
字典也可以用迭代的方式来实现,不过,dict迭代的是key,如果要迭代value,可以用for value in d.values();如果要同时迭代key和value,用for k,v in d.items();
迭代字典的value:
for n in d.values():
    print(n)
迭代字典的key和value:
for k,v in d.items():
    print(k,v)
 
在for循环中,同时引用两个变量是很正常的:
for x,y in [(1.1),(2,4),(3,6)]:
    print(x,y)
在输出的时候,直接用print(x,y)就可以了~~

列表生成式:
写列表生成式时,把要生成的元素x*x放到前面, 后面跟for循环,就可以把list创建出来;
[x * x for x in range(100)]        //把range(100)里面的元素放到x之后,根据x*x生成列表;
[m + n for m in 'ABC' for n in 'XYZ']        //使用两层循环,生成全排列;

生成器:创建一个列表,受到内存限制,列表容量有限。我们希望在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间,一边循环一边计算,称为生成器:generator;
第一种方法,把一个列表生成式的[]改成();就创建了一个generator;
L = [x * x for x in range(100)]
g = (x * x for x in range(100))
print(next(g))            // 0
print(next(g))            //1

我们已经知道,可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list,tuple,dict,set,str等;
一类是generator,包括生成器和带yield的generator function;
可以直接作用于for循环的对象统称为可迭代对象:iterable;
而可以被next()函数调用并不断返回下一个值的对象称为迭代器:iterator;
使用isinstance()判断一个对象是否是iterator对象;
生成器都是iterator对象,但是list,dict,str虽然是iterable却不是iterator;
把list,dict,str等iterable变成iterator可以用iter()函数;
注:凡是可作用于for循环的对象都是iterable类型;
凡是可作用于next()函数的对象都是iteratorlexington,表示一个惰性计算的序列;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

posted on 2018-04-30 16:42  楚大校  阅读(145)  评论(0编辑  收藏  举报

导航