具名元组
from collections import namedtuple
city = namedtuple('city', 'name country population coordinates')
tokyo = city('tokyo', 'Jp', 36.9, (25.7, 125.8))
print(tokyo.population)
print(tokyo[1])
类名为city, 其后带有5个值,分别是各个字段的名字, 可用属性值、相对访问位置。
print(city._fields) # 返回该类所有字段名称的元组
Lat = namedtuple('Lat', 'lat long')
det = ('det', 'in', 21.7 , Lat(28.6, 77.2))
ciyt._make(det) # 等将于city(*det)
print(city._asdict()) # 以collections.OrderedDict形式返回
切片 多维切片
s[a:b:c]
# s在a和b之间以c为间隔取值
# 四维数组切片 ...用作多维数组切片
x[i, ...] # 等价于x[i, :, :, :]
l = [0,1,2,3,4,5,6]
l[2:5] = [20,30]
# l = [0,1,20,30,4,5,6]
# 赋值对象为切片 则赋值语句右侧为可迭代对象
# 列表推导
b = [ ['_']*3 for i in range(3)]
>>> [['_','_','_'],['_','_','_'],['_','_','_']]
# 可变序列 增量加法时 变量id不变
# 否则 id改变 相当于 重新赋值
l = [1, 2, 3] # 可变元组
l *= 2
n = (1, 2, 3) # 不可变元组
n *= 2
list.sort 与 sorted()
sorted(可迭代对象, reverse, key) # 创建新列表排序, 原 列表不变
list.sort(reverse, key) # 就地排序
# reverse 为True 序列降序排序 False 升序排序
# key 一个只有一个参数的函数, 该函数会被用在序列里的每一个元素上,
# 所产生的结果是排序算法依赖的对比关键字 eg. key=len key=str.lower
fruits = ['grape', 'apple', 'banana']
sorted(fruits)
fruits.sort()
insort(seq, item)
# 将item 插入到序列seq中, 并保持它的有序
数组
只包含数字的列表:array.array
array(‘b’) 创建数组仅能存放一个字节大小的整数,切不可存放该类型以外的数据
from array import array
from random import random
floats = array('d', (random() for i in range(10**7)))
fp = open('floats.bin', 'wb')
floats.tofile(fp) # 将数组存入二进制文件
fp.close()
floats2 = array('d')
# 类型码d 表示双精度浮点数组
fp = open('floats.bin', 'wb')
floats2.fromfile(fp, 10**7) # 从二进制文件中读取浮点数
fp.close()
# 数组排序
a = array.array(a.typecode, sorted(a))
高性能计时器
from time import perf_counter as pc
t0 = pc()
floats /= 3
print(pc()-t0)