• python学习笔记(三)高级特性


    一、切片

     

      list、tuple常常截取某一段元素,截取某一段元素的操作很常用 ,所以python提供了切片功能。

    L=['a','b','c','d','e','f']
    #取索引0,到索引3的元素,不包括索引3
    print(L[0:3])
    #开始索引为0可以省略
    print(L[:3])
    #下标1到3
    print(L[1:3])
    #取最后一个元素
    print(L[-1])
    #取倒数后两个元素
    print(L[-2:])
    #取前四个数,每两个取一个
    print(L[:4:2])
    #所有数,每两个取一个
    print(L[::2])

    二、迭代

     除了list、tuple可以迭代外,python中的dict类型变量也可以迭代。

    dictor = {'name':'Jul','age':17,'femail':1}
    #迭代key
    for key in dictor:
        print(key)    
    #迭代value
    for value in dictor.values():
        print(value)
    #迭代key,value
    for k,v in dictor.items():
        print(k,v)

     可以将list变为索引元素对的形式

    for x,y in [(1,2),(3,4),(5,6)]:
        print(x,y)
    #变为索引元素对
    for i,value in enumerate(['A','B','C']):
        print(i,value)

    同时可以判断一个对象是否可以迭代

    for x,y in [(1,2),(3,4),(5,6)]:
        print(x,y)
    #变为索引元素对
    for i,value in enumerate(['A','B','C']):
        print(i,value)

     、列表生成式

    list函数可以将一组对象组合为列表,[]操作也可以。[]操作的方式称作列表生成式

    print([x for x in range(1,11)])
    print(list(range(1,11)))

    在列表生成式中可以加入一些运算规则,使生成的列表具备运算规则。

    #变为索引元素对
    for i,value in enumerate(['A','B','C']):
        print(i,value)
    #平方
    print([x*x for x in range(1,11)])
    #偶数平方
    print([x*x for x in range(1,11) if x%2 ])
    #k:v形式的列表
    strdic={'a':'a1','b':'b1','c':'c1'}
    print([k+':'+v for k,v in strdic.items()])
    #将列表中字符串换为小写
    L = ['Hello', 'World', 18, 'Apple', None]
    print([s.lower() for s in L if(isinstance(s,str)) ])

    、生成器

    python提供生成器的功能,生成器根据函数或运算规则产生一系列数据,

    通过对返回值g调用next(g)可以依次取出生成的数据。

    g = (x*2 for x in range(1,11))
    print(g)
    print(next(g))

    可以一直调用next(g),直到产生StopIteration异常。

    当然也可以通过函数构造生成器,将函数return的关键字换为yield即可。

    #菲波那切数列
    def fib(max):
        a,b,n = 0,1,0
        while n < max:
            yield b
            a,b=b,a+b
            n = n+ 1
        return "exit"

    通过下面方式next取出数列中的元素,第三次调用会抛出StopIteration异常。

    g=fib(2)
    print(g)
    print(next(g))
    print(next(g))
    #print(next(g))

    上面代码中g为迭代器,通过对g不断调用next取出数列中元素。

    可以通过检测异常的方式完成遍历,避免程序崩溃。

    g2 = fib(6)
    
    while True:
        try:
            value = next(g2)
            print("value: ", value)
        except StopIteration as e:
            print("Generator return value is: ", e)
            break

    可以用生成器实现杨辉三角,生成器函数为triangles()。

    生成器函数triangles()实现如下:

    def triangles():
        yield [1]
        yield [1,1]
        lists = [1,1]
        while True:
            i = 1
            n = len(lists)
            newlists = [1]
            while i < n:
                newlists.append(lists[i-1] + lists[i])
                i = i+1
            newlists.append(1)
            lists = newlists
            yield newlists    
    

    、迭代器

    python提供生成器的功能,生成器根据函数或运算规则产生一系列数据,

    通过对返回值g调用next(g)可以依次取出生成的数据。g就是迭代器。

    有的对象可以迭代但是不是迭代器,只有可以被next调用的对象才是迭代器。

    同样可以通过isinstance函数判断迭代器。

    from collections import Iterable
    from collections import Iterator
    
    b1 = isinstance([], Iterable)
    b2 = isinstance([], Iterator)
    print('[] is Iteralbe', b1)
    print('[] is Iterator', b2)
    
    b1 = isinstance({},Iterable)
    b2 = isinstance({},Iterator)
    
    print('[] is Iteralbe', b1)
    print('[] is Iterator', b2)
    
    b1 = isinstance((x*x for x in range(10)), Iterable)
    b2 = isinstance((x*x for x in range(10)), Iterator)
    print('x*x for x in range(10) isIterable', b1)
    print('x*x for x in range(10) isIterator', b2)
    
    #可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
    
    b1 = isinstance(triangles(),Iterable)
    b2 = isinstance(triangles(),Iterator)
    print('triangles()', b1)
    print('triangles()', b2)

    特性就总结到此,下次会总结记录python函数的一些特性。

    我的公众号,谢谢关注:

  • 相关阅读:
    Android(java)学习笔记78:Java类初始化顺序
    Android(java)学习笔记77:Android中assets文件夹资源的访问
    Android(java)学习笔记76:Handler用法总结 和 秒表案例
    Android(java)学习笔记75:ListViewProject案例(ListView + BaseAdapter + CheckBox)
    Android(java)学习笔记74:ListViewProject案例(ListView + ArrayAdapter)
    POJ 2516 Minimum Cost
    POJ 2195 Going Home
    POJ 1087 A Plug for UNIX
    POJ 3281 Dining
    ZUFE OJ 2289 God Wang II
  • 原文地址:https://www.cnblogs.com/secondtonone1/p/6892928.html
Copyright © 2020-2023  润新知