zoukankan      html  css  js  c++  java
  • 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,表示一个惰性计算的序列;
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) D. Little Artem and Dance
    HDU 5521 Meeting 最短路
    BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点
    P2661 信息传递 强连通分量
    Codeforces Round #343 (Div. 2) C. Famil Door and Brackets
    HDU 4859 海岸线 最小割
    HDU 4162 Shape Number
    Codeforces Round #355 (Div. 2) D. Vanya and Treasure dp+分块
    bzoj 1295: [SCOI2009]最长距离 暴力+bfs最短路
    Codeforces Round #222 (Div. 1) C. Captains Mode 对弈+dp
  • 原文地址:https://www.cnblogs.com/zxx123/p/8973964.html
Copyright © 2011-2022 走看看