检查Python 2.6中deque的最大长度

6 投票
4 回答
4340 浏览
提问于 2025-04-16 06:05


我需要把我的代码从 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 中是没有这个功能的。

不过,你可以尝试以下几种方法:

  1. 创建一个新的类,继承 deque 的所有方法和属性,同时添加一个 maxlen 属性。
  2. 调整你的代码,让 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

撰写回答