python内置序列类型_Python 内置序列类型、列表推导和生成器

Python 内置序列类型

list、 tuple 和 collections.deque 这些序列能存放不同类型的数据。里面存放的对象为对象引用。

str、 bytes、 bytearray、 memoryview 和 array.array, 这类序列只能容纳一种类型。且存放的都是值。

另外

list、 bytearray、 array.array、 collections.deque 和 memoryview 是可变类型。

tuple、 str 和 bytes 是不可变类型。

列表推导和生成器表达式

# 列表推导

colors=['black','white']

sizes=['S','M','L']

tshirts=[(color,size) for color in colors for size in sizes]

print(tshirts)

for tshirt in tshirts:

print(tshirt)

for color in colors:

for size in sizes:

print(color,size)

# 生成器表达式

tshirts=tuple('%s %s'%(color,size) for color in colors for size in sizes)

print(tshirts)

import array

symbols = '$¢£¥€¤'

arr=array.array('I',(ord(symbol) for symbol in symbols))

print(arr)

列表推导、 生成器表达式, 以及同它们很相似的集合(set) 推导和字典(dict) 推导, 在 Python 3 中都有了自己的局部作用域, 就像函数似的。 表达式内部的变量和赋值只在局部起作用, 表达式的上下文里的同名变量还可以被正常引用, 局部变量并不会影响到它们。如:

>>> x = 'ABC'

>>> dummy = [ord(x) for x in x]

>>> x

'ABC'

>>> dummy

[65, 66, 67]

ord() 与 chr() 是 python 内置方法,实现 Unicode code 与字符间的互换。

>>> ord('a')

97

>>> chr(65)

'A'

列表推导与 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]

map(function, iterable):iterable 中的每一项均会应用到 function 方法中,然后返回一个 iterator。

filter(function, iterable):iterable 中的每一项均会应用到 function 方法中,根据 function 方法中返回 True 的值构建一个 iterator。如果 function = None,将删除 为 False 的值。

>>> filter(None, range(2))

>>> list(filter(None, range(2)))

[1]

推荐使用列表推导!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值