本站总访问量 Python数据结构 - Jerry的小站

Jerry Gao

上帝就是真理,真理就是上帝

[toc]

序列构成的数组

python标准库用C实现了丰富的序列类型

  • 容器序列
    • list、turple和collection.deque,这些序列能够存放不同的数据
    • 存放的包含任意对象类型的引用
  • 扁平序列
    • str、bytes、bytearray、memoryview和array.array,这些类型只能容纳一种类型
    • 一段连续的内存空间,存放的是值,只能存放字符、字节和数值这种基础类型

按照能否被修改来分类

  • 可变序列
    • list、bytearray、array.array、colllection.deque和memoryview
  • 不可变序列
    • tuple、str和bytes

列表推导式和生成器表达式

只用列表推导式来创建一个新的列表,如果列表推导式过长,超过两行,那就要考虑是否要用for重写

在Python2里面for关键字之后的赋值操作可能会影响列表中的同名变量,比如

1
2
3
x = "hhh"
a = [x for x in "ABC"]
print(x) # "C"

而在Python3里面不会出现这个问题,在Python3里面都会有自己的局部作用域

生成器表达式能够节约内存

元组不仅仅是不可变的列表,还是没有字段名的记录

元组里面携带了包含了所有的元素的总数和他们的位置,在任何的表达式里面我们对元组进行排序,那么这些携带的信息就会丢失

对列表的切片进行赋值

对序列使用+或者*都会创建一个新的对象而不会修改原有对象

  • 不要把可变对象放到元组里面
  • 增量赋值不是一个原子操作,先加再赋值
  • 查看python的字节码并不难

list.sort()不会产生新的列表,而是在原有的列表上进行赋值,而sorted会产生一个新的列表

评论