序列构成的数组: 容器序列:list、tuple和collections.dequeue这些序列能存放不同类型的数据 扁平序列:str、bytes、bytearray、memeoryview和array.array这些序列只能存放一种类型的数据 可变序列:list、bytearray、array.array、collections.dequeue和memoryview 不可变序列:tuple、str和bytes
目录
列表推导
列表推导举例
普通版本
symbols = '@#$%^'
codes = []
for symbol in symbols:
codes.append(ord(symbol))
使用列表推导的版本
symbols = '!@#$%^'
codes = [ord(symbol) for symbol in symbols]
tips:python 会忽视代码中[] () {}中的换行,可以省略换行符 ‘\’
列表推导和filter、map的比较
列表推导不用借助lambda就可以完成,filter和map合起来做的事情
symbols = '$@#$%^&'
beyond_ascii = [ord(s) for s in symbols if ord(s)>127]
beyond_ascii = list(filter(lambda c:c > 127, map(ord,symbols)))
生成器表达式
生成器表达式的语法和列表推导的差不多,只是把方括号换成圆括号。生成器表达式相比列表推导,它是逐个的产出元素而不是先建立一个完整的列表再把这个列表传给某个构造函数,前面哪种方式显然更节省内存。
symbols = '%^&*$%'
tuple(ord(symbol) for symbol in symbols)
import array
array.array('I',(ord(symbol) for symbol in symbols))
colors = ['black','white']
sizes = ['S','M','L']
for tshirt in ('%s %s' % (c,s) for c in colors for s in sizes)
print(tshirt)
元组不仅是不可变列表
元组用于记录
kax_coordinates = (33.94525,-118.408056)
city, year, pop, chg, area = ('Tokyo',2003,32450,0.66,8014)
traveler_ids = [('USA', '33195855'), ('BRA', 'CE342567'), ('ESP', 'XDA205856')]
for passport in sorted(traveler_ids):
print('%s/%s' % passport)
for country, _ in traveler_ids:
print(country)
元组拆包
平行赋值
lax_coordinates = (33.9425, -118.408056)
latitude, longitude = lax_coordinates
(交换)
a, b = b, a
使用’*‘把一个可迭代对象拆开作为函数参数
divmod(20, 8)
t = (20,8)
divmod(*t)
#商,余数
quotient, remainder = divmod(*t)
import os
_, filename = os.path.split('.home/luciano/.ssh/idrsa.pub')
用‘ *’ 处理剩下的元素,平行赋值中 ‘ *’前缀只能用在一个变量名前
a, b, *rest = range(5)
a, *body, c, d = range(5)