zoukankan      html  css  js  c++  java
  • python基础2

    高级特性

    切片

    切片即取一个list 或者 tuple 的部分元素

    L= ["abc", "bcd", "efg", 123, 666]
    
    L[0 : 3]    #取前3个元素,左闭右开
    L[ : 3]     #取前3个元素,左端索引为0可省略
    L[-2 : ]    #取倒数第2个一直到末尾
    L[-3: -1]   #取倒数第3和第2个,注意倒数第一个元素的索引是-1
    
    L[ :10 :2]    #取前10个数,每2个取1个
    
    L[:]    #原样复制一个list

    注:tuple也可切片,结果仍是tuple; str同理

    迭代

    迭代即便利某个list或者tuple,或者str

    #dict 迭代key
    d = {'a': 1, 'b': 2, 'c': 3}
    for key in d:
        print(key)
    
    #dict默认迭代key,若要迭代value
    for val in d.values():
        print(val)
    
    #同时迭代key 和 value
    for k, v in d.items():
        print(k, v)
    
    #如果在迭代list时想要下标,可使用 enumerate 函数把list变成索引-元素对
    for i, val in enumerate(['A', 'B', 'C'])
        print(i, val)

    列表生成式

    列表生成式在python中用来生成list

    #生成内容为1到10的list
    list( range(1, 11) )
    #生成从1到10的平方的列表,先把x*x写在前面,列表生成式则用for循环的形式
    L = [x*x for x in range(1, 11) ]    
    #可以在for循环后加上if,筛选出偶数的平方
    L = [x*x for x in range(1, 11) if x % 2 == 0]  
    
    #使用双层嵌套循环,生成全排列
    [s1 + s2 for s1 in 'ABC' for s2 in 'XYZ']
    
    #遍历字典生成全排列
    d = {'x': 'A', 'y': 'B', 'z': 'C' }
    [k + '=' + 'v' for k, v in d.items()]

    生成器 generator

    生成器可以使得在循环的过程中不断推算出后面元素,而不必创建完整的list,从而可以节省空间

    生成器有两种:列表生成式构造的生成器、由函数构造的生成器

    1)列表生成式构造的生成器:将列表生成式的 [ ] 改成 ( ) 即可

    L = [x * x for x in range(10)]    #普通的列表生成式
    
    g = (x*x for x in range(10))    #g是一个生成器
    print(next(g))      #用next()函数可以获得generator的下一个返回值,没有元素时继续调用next() 会抛出StopIteration错误
    
    g = (x*x for x in range(10))    #g是一个生成器
    for i in g:      #生成器也是可迭代对象,因此可以用for循环
        print(i)

    2)由函数构造的生成器:使用yield

    #例子1
    def odd():      #函数中包含yield关键字,则函数不再是普通函数,而是generator
        print('step 1')
        yield 1
        print('step 2')
        yield 3
        print('step 3')
        yield 5
    myOdd = odd()      #这也不是普通的函数调用,而是生成了一个generator对象
    next(myOdd)        #用next() 函数不断获得下一个返回值

    yield:函数执行到yield之后就进行返回,等到下次next()执行时,从上次返回的yield下方继续执行

    #例子2,输出杨辉三角:将每一行看作一个list,写一个generator,使得能不断输出下一行的list
    def triang():
        L = [1]
        while True:
            yield L
            lens = len(L)
            L = [ L[n] + L[n+1] for n in range(0, lens - 1)]#生成每行除了一头一尾的所有数字
            L.insert(0, 1)    #添加开头的1
            L.append(1)    #添加末尾的1

    注意:1.杨辉三角的第n+1行每一个元素都是第n行的上面两个数的和(除了一头一尾的两个1)

               2.while True 很常用

     迭代器

    可迭代对象 Iterable:可以直接作用于for循环的对象称为可迭代对象,如 list、tuple、dict、set、str等;可使用isinstance() 判断一个对象是否是Iterable对象

    isinstance([], Iterable)      #判断是否是可迭代对象
    isinstance('abc', Iterable)
    isinstance((x for x in range(10)), Iterable)

    迭代器对象 Iterator:可以被next() 函数调用并不断返回下一个值的对象称为迭代器对象;可使用isinstance() 判断对象是否是Iterator对象;

     isinstance((x for x in range(10)), Iterator)      #生成器既是可迭代对象,又是迭代器对象
    
    iter([1,2,3])      #iter() 函数可以把可迭代对象变成迭代器对象
    iter("abcdef")
  • 相关阅读:
    20200630(A--E)题解 by 王文硕
    20200629(A--E)题解 by 章思航
    GC垃圾回收
    Codeforces Round #629 (Div. 3) A、B、C
    AtomicInteger的Increment方法的自己实现。
    两个线程,一个输出字母一个输出数字,输出A1B2C3....Z26
    NIO记录
    mysql优化相关
    一些Nginx的Linux命令和conf配置文件
    docker记录
  • 原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/10404171.html
Copyright © 2011-2022 走看看