风火编程--python字符串str具名元组namedtuple列表list推导式及字节数组bytearray

版权声明:风火编程, 欢迎指正. https://blog.csdn.net/weixin_42620314/article/details/83965040

《流畅的python》读书笔记(一)

第2章 数据结构

2.1
容器序列: tuple, list, collections.deque
存储不同类型数据的引用
扁平序列: str, bytearray, memeryview, array.array
存储同一种基础类型(字符,字节,数值)的数据(占用连续的内存空间)

2.2
列表推导式
if筛选放在在最后[result for… if expression]
if…else判断放在前面[result1 if expression else result2 for…]
如果列表推导式的长度超过两行,考虑使用for循环

2.3
平行赋值(解构赋值)
拆包与组包可以出现在平行赋值的任何位置
a, *b, c = “12345”
print(a)
print(b)
print©

具名元组(类工厂函数)的使用
通过._asdict()转为OrderedDict
再用dict()转为字典

from collections import namedtuple
C = namedtuple("City", ["a", "b"])
c = C(1,2)
print(c)
od = c._asdict()
print(od)
d = dict(od)
print(d)

2.6
对元组中的列表进行修改会抛出TypeError异常
str在初始化内存的时候预留了扩展空间, 因此进行就地运算的时候不是复制原有字符串到新的内存空间. 但是id会发生变化

2.7
list.sort()会在list上改变元素顺序, 没有返回值
sorted()会copy list并排序, 不改变list本身

2.8
内置模块bisect

 from bisect import bisect, insort
    seq = [1,3,4]
# 返回使原序列保持升序的插入位置的索引
needle = bisect(seq, 2)
print(needle)
# 在保持原序列升序的位置插入元素,没有返回值
insort(seq, 2)
print(seq)

2.9
list一般用于存储相同类型的数据, tuple一般用于存储不同类型的实时数据.
纯数字容器用array.array
先进先出容器用collections.deque
包含检查用set, set无序可变

array.tofile()和array.fromfile()读写二进制文件速度比文本快7/60倍, 空间节省一半以上.
array.array没有广播运算, 不同于ndarray,.
deque会自动维护一个窗口, 当队列满员后再添加一个成员时会再另一端删除一个成员

from collections import deque
dq = deque(range(5), maxlen=5)
dq.append(5)
print(dq)

queue.Queue满员后会阻塞

sorted()的key参数指定排序依据

alist = ["1", "2", "12"]
ilist = sorted(alist, key=int)
slist = sorted(alist, key=str)
print(ilist)
print(slist)

list.sort和sorted的底层是Timsort算法,
根据序列特点交替使用插入排序和归并排序进行计算.

猜你喜欢

转载自blog.csdn.net/weixin_42620314/article/details/83965040
今日推荐