List 可变数组
List 为可变数组,在执行添加元素操作时,会根据当前数组长度额外开辟空间(无需每次添加元素都开辟空间)。虽然方便修改,但占用内存。
2. Tuple 被视为不可变列表,但其实它是数据的记录。Tuple 一旦创建则无法更改其中的元素,但是可以修改元组元素中的元素(嵌套元素)。
>>> data = ([1, 2, 3], [4, 5, 6])
>>> data[1] = [2, 5, 6]
TypeError: 'tuple' object does not support item assignment
>>> data[0][2] = 88
>>> print(data)
([1, 2, 88], [4, 5, 6])
List、Tuple 的拆包
>>> data = ['jack', 'male', '6']
>>> name, sex, age = data
>>> print(name, sex, age)
jack male 6
>>> name, *others = data
>>> print(name, others)
jack ['male', '6']
Namedtuple 具名元组
Namedtuple 具名元组,使用名称以及 ‘.’ 来获取数据。可视为 简单的自定义类。
>>> People = namedtuple('people', 'name sex age')
>>> p1 = People('jack', 'male', '25')
>>> print(p1)
people(name='jack', sex='male', age='25')
>>> print([i for i in p1._fields])
['name', 'sex', 'age']
>>> for i in p1._asdict().items():
>>> print(i, end=', ')
('name', 'jack'), ('sex', 'male'), ('age', '25'),
>>> print(p1.name)
jack
Array 列表。
当我们只需要一个包含数字的列表时,array.array 比 List 更高效。且支持读写文件,比 List 更加节省空间。array 需要指定一个类型码。
Type code C Type Minimum size in bytes
'b' signed integer 1
'B' unsigned integer 1
'u' Unicode character 2 (see note)
'h' signed integer 2
'H' unsigned integer 2
'i' signed integer 2
'I' unsigned integer 2
'l' signed integer 4
'L' unsigned integer 4
'q' signed integer 8 (see note)
'Q' unsigned integer 8 (see note)
'f' floating point 4
'd' floating point 8
>>> from array import array
>>> a = array('b', (1, 2, 5, 7, 2, 9))
>>> print(a)
array('b', [1, 2, 5, 7, 2, 9])
>>> print(a[1])
2
Deque 双端队列
从头尾添加、删除元素效率高,但中间较复杂。可以指定固定元素数,存放历史记录。固定长度后,从头添加则自动删除尾部元素,从尾添加则自动删除头部元素。并且是多线程安全的。
>>> from collections import deque
>>> deq = deque(range(5), maxlen=5)
>>> print(deq)
deque([0, 1, 2, 3, 4], maxlen=5)
>>> deq.rotate(2)
>>> print(deq)
deque([3, 4, 0, 1, 2], maxlen=5)
>>> deq.rotate(-2)
>>> print(deq)
deque([0, 1, 2, 3, 4], maxlen=5)
>>> deq.append(10)
>>> print(deq)
deque([1, 2, 3, 4, 10], maxlen=5)