序列类型概览

1 python 中序列类型概览

按照存储类型是否唯一:

  • 容器序列: 如list, tuple, 和collections.deque
  • 扁平序列: 如 str, bytes, butearray, memoryview和array.array

容器序列存放的是任意类型的对象的引用, 而扁平序列是存放的是值而不是引用。扁平序列是一段连续的内存区域,因此扁平序列其实更加紧凑。

按照能否被修改来分类:

  • 可变序列: 如 list, bytearray, array.array, collections.deque和memoryview
  • 不可变序列: tuple, str和bytes

2 生成list的列表推导

  • 列表推导, 尽量只用来创建新列表
symbols = '$¢£¥€¤'
codes = [ord(symbol) for symbol in symbols]
symbols = '$¢£¥€¤'
codes = []
for symbol in symbols:
    codes.append(ord(symbol))

这两个例子是不是第一个可读性更好,也更有简洁。 另外列表推导中的变量具有局部作用域, 来做个测试。

x='ABC'
dummy=[x for x in 'ABC']
print(x)

上面的代码应该输出 ABC.

  • 列表推导代替 filter 和map
>>> symbols='$¢£¥€¤'
>>> beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
>>> beyond_ascii
[162, 163, 165, 8364, 164]

>>> beyond_ascii = list(filter(lambda c: c > 127, map(ord, symbols)))
>>> beyond_ascii
[162, 163, 165, 8364, 164]
  • 列表推导生成笛卡尔积
>>> 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')]

3 生成器表达式

  • 生成元组和数组
>>> symbols = '$¢£¥€¤'
>>> tuple(ord(symbol) for symbol in symbols)
(36, 162, 163, 165, 8364, 164)
>>> import array
>>> array.array('I', (ord(symbol) for symbol in symbols))
array('I', [36, 162, 163, 165, 8364, 164])

  • 生成器计算笛卡尔积
    好处是节省内存, 每次循环才生成一个组合
>>> colors = ['black', 'white']
>>> sizes = ['S', 'M', 'L']
>>> for tshirt in ('%s %s' % (c, s) for c in colors for s in sizes):
...     print(tshirt)
...
black S
black M
black L
white S
white M
white L

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值