美文网首页
Fluentpython 数据结构-列表推导

Fluentpython 数据结构-列表推导

作者: 步履不停的Suunny | 来源:发表于2018-05-09 11:37 被阅读0次

    Fluentpython 数据结构

    2.1 内置序列类型概览

    Python 标准库用 C 实现了丰富的序列类型,列举如下。

    容器序列
      list、tuple 和 collections.deque 这些序列能存放不同类型的数据。
    扁平序列
      str、bytes、bytearray、memoryview 和 array.array,这类序列只能容纳一种类型。

    序列类型还能按照能否被修改来分类。

    可变序列
      list、bytearray、array.array、collections.deque 和memoryview。
    不可变序列
      tuple、str 和 bytes。

    列表推导和生成器表达式

    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。
    很多 Python 程序员都把列表推导(list comprehension)简称为listcomps,生成式表达器(generator expression)则称为 genexps

    列表推到示例:

    >>> symbols = '$¢£¥€¤'
    >>> codes = [ord(symbol) for symbol in symbols]
    >>> codes
    [36, 162, 163, 165, 8364, 164]
    

    如果不用列表推导的实现方法:

    >>> symbols = '$¢£¥€¤'
    >>> codes = []
    >>> for symbol in symbols:   # 使用for循环
    ... codes.append(ord(symbol))
    ...
    >>> codes
    [36, 162, 163, 165, 8364, 164]
    

    列表推导也可能被滥用,通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。如果列表推导的代码超过了两行,你可能就要考虑是不是得用 for 循环重写了。

    Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量, python3中是不会出现的。 如下:

    PYTHON3                                 PYTHON2
    >>> x = 'ABC'                           >>> x = 'ABC'
    >>> dummy = [ord(x) for x in x]         >>> dummy = [ord(x) for x in x]
    >>> x                                   >>> x 
    'ABC'                                   'C'
    >>> dummy                               >>> dummy
    [65, 66, 67]                            [65, 66, 67]
    >>>                                     >>>
    
    ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)
    的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或Unicode 数值,
    如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
    
    >>> ord("e")
    101
    >>> chr(101)
    'e'
    

    相关文章

      网友评论

          本文标题:Fluentpython 数据结构-列表推导

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