序列构成的数组

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.

你可能感兴趣的:(序列构成的数组)