Python中collections.deque数据结构的构造函数__init__()深入理解
Python中的collections.deque是一个双向队列数据结构,可以在两端高效地进行插入和删除操作。deque的构造函数__init__()有一些可选的参数,可以用来初始化deque对象。
__init__()函数的参数可以有以下几种形式:
1. __init__(self, iterable=None, maxlen=None)
这是最常用的参数形式,可以用来初始化一个空deque对象,也可以使用可迭代对象来初始化deque对象。如果iterable参数不为None,则会将可迭代对象的元素依次添加到deque中,可迭代对象可以是列表、元组、字符串等等。maxlen参数可以用来限制deque对象的大小,即deque中的元素个数不能超过maxlen。
下面是一些使用__init__()函数的例子:
from collections import deque
# 初始化一个空deque对象
d = deque()
print(d)
# 使用可迭代对象初始化一个deque对象
d = deque([1, 2, 3, 4, 5])
print(d)
# 使用字符串初始化一个deque对象
d = deque("hello")
print(d)
# 使用maxlen参数限制deque对象的大小
d = deque(maxlen=3)
d.append(1)
d.append(2)
d.append(3)
print(d) # deque([1, 2, 3], maxlen=3)
d.append(4)
print(d) # deque([2, 3, 4], maxlen=3)
2. __init__(self, itertype, maxlen=None)
这是另一种使用maxlen参数限制deque对象大小的方式。itertype参数是一个类型对象,可以是list、tuple、str等,用来初始化一个空的deque对象。如果使用这种方式初始化deque,必须在之后调用extend()或append()等方法添加元素。
下面是一个使用itertype参数的例子:
from collections import deque # 使用list类型对象初始化deque d = deque(list, maxlen=3) print(d) # deque([], maxlen=3) d.extend([1, 2, 3]) print(d) # deque([1, 2, 3], maxlen=3) d.append(4) print(d) # deque([2, 3, 4], maxlen=3)
3. __init__(self, maxlen)
如果只传入一个整数maxlen参数,则会初始化一个空deque对象,并且限制deque对象的大小为maxlen。
下面是一个使用maxlen参数的例子:
from collections import deque # 限制deque对象的大小为3 d = deque(3) print(d) # deque([], maxlen=3) d.append(1) d.append(2) d.append(3) print(d) # deque([1, 2, 3], maxlen=3) d.append(4) d.append(5) print(d) # deque([3, 4, 5], maxlen=3)
总结起来,不管使用哪种形式的参数,__init__()函数都可以用来初始化一个deque对象。使用可迭代对象初始化deque对象是最常用的方式,但也可以使用maxlen参数限制deque的大小。
需要注意的是,deque对象可以在两端进行插入和删除操作,因此在限制deque对象大小时,实际上是限制deque对象的元素个数,而不是对象本身的大小。当deque对象的元素个数超过maxlen时,会自动删除掉超出的元素。
