python高级特性应用

作者: 小船翻不翻 | 来源:发表于2018-05-29 10:08 被阅读0次

    切片

    在索引查询中使用 : 查询就是切片的标志性用法

    #声明一个list
    >>> L = list(range(100))
    >>> L
    [0, 1, 2, 3, ..., 99]
    #0代表索引开始的位置,3代表索引结束的位置
    #缺省状态下, **:** 前面是0,后面是list最后一个索引
    #如L[:3](作用相同),L[1:](跳过第一个)
    >>> L[0:3]
    [0, 1, 2]
    
    • 查询索引可以是负数,负数代表倒着查询
    • 两个 : 时,最后面的数字表示跳过个数
    • 原数据可以是list tuple,可以是字符串
    • 原数据是什么类型,切片后仍然是该类型
    #读取后10位
    >>> L[-10:]
    [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
    #前10个,每两个读取一个
    >>> L[:10:2]
    [0, 2, 4, 6, 8]
    

    迭代

    通过for...in来完成的就是迭代

    • dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
    • 使用enumerate函数可以把一个list变成索引-元素对
    #测试对象是否允许迭代
    >>> from collections import Iterable
    >>> isinstance('abc', Iterable) # str是否可迭代
    True
    #类型转换使用迭代
    >>> for i, value in enumerate(['A', 'B']):
    ...     print(i, value)
    ...
    0 A
    1 B
    

    列表生成式

    将输出与for写在一行的形式,生成结果不改变原有集合数据,自动生成转换过渡集合

    #有判断的循环,转换成小写
    >>>L1 = ['Hello', 'World', 18, 'Apple', None]
    >>>[s.lower() for s in L1 if isinstance(s, str)]
    ['hello', 'world', 'apple']
    #嵌套循环
    >>> [m + n for m in 'ABC' for n in 'XYZ']
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
    #字典
    >>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
    >>> [k + '=' + v for k, v in d.items()]
    ['y=B', 'x=A', 'z=C']
    

    生成器

    • generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,没有元素的时候抛出StopIteration的错误。
    • 使用了关键字yield,程序遇到它就停止,再次执行next函数时,会从上次停止的位置继续。
    #b的值直接赋给了a,a+b的值直接赋给了b,没有临时变量完成了交换
    a, b = b, a + b
    #这样的格式用于捕获直接使用next函数导致的异常值
    try:
        pass
    except StopIteration as e:
        raise #ex.value
    else:
        pass
    finally:
        pass
    #杨辉三角
    def triangles():
        L = [1]
        while True:
            yield L[:]
            L.append(0)
    #打印出修改结果前的数据,便于理解列表生成式
            #print('循环修改前',L)
            L = [L[i - 1] + L[i] for i in range(len(L))]
    #调用杨辉三角
    for t in triangles():
        print(t)
    

    迭代器

    • 迭代对象 Iterable,是有限的数据,可以for循环
    • 迭代器 Iterator,是无限大算法,可以next取值
    • 将迭代对象 Iterable→迭代器 Iterator 使用iter()函数

    相关文章

      网友评论

        本文标题:python高级特性应用

        本文链接:https://www.haomeiwen.com/subject/erbwjftx.html