检查Python 2.6中deque的最大长度
我需要把我的代码从 Python 2.7 改成 2.6。
我一直在用一个叫 deque 的数据结构,它有一个 maxlen 属性,用来检查最大长度。听说在 Python 2.6 中也可以用 maxlen,但在 2.6 版本中,deque 并没有 maxlen 这个属性。
那么,在 Python 2.6 中,检查 deque 的最大长度最简单的方法是什么呢?
在 2.7 中:
from collections import deque
d = deque(maxlen = 10)
print d.maxlen
在 2.6 中,deque 可以使用,maxlen 也能正常工作,但 maxlen 不是一个可以直接引用的属性。
谢谢
4 个回答
2
我会创建一个自己的队列类,这个类是从双端队列(deque)继承过来的。大概是这样的:
class Deque(deque):
def __init__(self,*args,**kwargs):
deque.__init__(self, *args, **kwargs)
self.maxlen = kwargs.get('maxlen',None)
>>>d = Deque(maxlen=10)
>>>d.maxlen
>>>10
2
maxlen
是在 Python 2.7 中新增的一个功能,它属于 deque
这个数据结构。在 Python 2.6 中是没有这个功能的。
不过,你可以尝试以下几种方法:
- 创建一个新的类,继承
deque
的所有方法和属性,同时添加一个maxlen
属性。 - 调整你的代码,让
maxlen
这个功能变得不必要。
6
我会通过继承 collections.deque
来创建我自己的 deque
。这并不难。具体代码如下:
import collections
class deque(collections.deque):
def __init__(self, iterable=(), maxlen=None):
super(deque, self).__init__(iterable, maxlen)
self._maxlen = maxlen
@property
def maxlen(self):
return self._maxlen
这是新创建的 deque 在实际使用中的样子:
>>> d = deque()
>>> print d
deque([])
>>> print d.maxlen
None
>>> d = deque(maxlen=3)
>>> print d
deque([], maxlen=3)
>>> print d.maxlen
3
>>> d = deque(range(5))
>>> print d
deque([0, 1, 2, 3, 4])
>>> print d.maxlen
None
>>> d = deque(range(5), maxlen=3)
>>> print d
deque([2, 3, 4], maxlen=3)
>>> print d.maxlen
3