美文网首页
序列构成的数组

序列构成的数组

作者: 钢笔先生 | 来源:发表于2019-08-02 18:43 被阅读0次

    Time: 2019-08-02
    书籍: 《流畅的Python》

    数据火车:文本,列表,表格。

    Python处理序列数据的方式是统一的风格,无论是哪种数据结构:

    • 字符串
    • 列表
    • 字符串
    • 字节序列
    • 数组
    • XML元素
    • 数据库查询结果

    在Python中都可以共用一套操作:

    • 迭代
    • 切片
    • 排序
    • 拼接

    在Python这里,标准库中的序列类型有:

    • 容器类序列

      • list
      • tuple
      • collections.deque
    • 扁平序列

      • str
      • bytes
      • bytearray
      • memoryview
      • array.array

    其中,扁平序列只能容纳一种类型,且存放的是,容器序列可以存放任意类型的对象的引用

    从可变性角度划分

    • 可变序列

      • list
      • bytearray
      • array.array
      • collections.deque
      • memoryview
    • 不可变序列

      • tuple
      • str
      • bytes

    其中,list是最重要、最基础的序列类型,这是个可变序列,可同时存放不同类型的元素。

    接下来复习列表推导功能。

    列表推导(list comprehension)

    这是一种构建列表的方法。

    掌握列表推导是通往生成器表达式(generator expression)的必经之路。

    列表推导使用案例:

    symbols = 'abcdefg'
    codes = [ord(symbol) for symbol in symbols]
    

    使用原则:只用列表推导来创建新的列表,并保持简短。若超过了两行,可以考虑用for循环。

    列表推导与filter,map的比较

    symbols = 'acfjlmopq'
    beyond_ascii = [ord(s) for s in symbols if ord(s) > 100]
    
    beyond_ascii = list(filter(lambda c: c > 127, map(ord, symbols)))
    

    双重循环生成笛卡尔积案例

    # 双重循环
    colors = ['black', 'white']
    sizes = ['S', 'M', 'L']
    
    tshirts = [(color, size) for color in colors for size in sizes]
    tshirts 
    '''
    [('black', 'S'),
     ('black', 'M'),
     ('black', 'L'),
     ('white', 'S'),
     ('white', 'M'),
     ('white', 'L')]
    '''
    

    生成器表达式

    生成器表达式遵守迭代器协议,可以逐个产出元素,不是先建立一个完整的列表。

    所以生成器表达式方式还可以节省内存。

    重点来了:生成器表达式的语法是把列表推导中的方括号变成圆括号。

    symbols = 'åœ∑®©†¥˙'
    tuple(ord(symbol) for symbol in symbols)
    # (229, 339, 8721, 174, 169, 8224, 165, 729)
    

    元组

    元组不仅仅是不可变的列表,还可以用作:

    • 记录
    • 元组拆包
    • 具名元组:collections.namedtuple()

    END.

    相关文章

      网友评论

          本文标题:序列构成的数组

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