From f3acedb207df8a6709852bece70776826f57e7eb Mon Sep 17 00:00:00 2001 From: Matt Trentini Date: Sat, 14 Aug 2021 01:13:11 +1000 Subject: [PATCH 1/3] collections.deque: Add maxlen support and remove popright (non-standard). --- .../collections.deque/collections/deque.py | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/python-stdlib/collections.deque/collections/deque.py b/python-stdlib/collections.deque/collections/deque.py index 1d8c62d4b..618fc3288 100644 --- a/python-stdlib/collections.deque/collections/deque.py +++ b/python-stdlib/collections.deque/collections/deque.py @@ -1,28 +1,41 @@ class deque: - def __init__(self, iterable=None): + def __init__(self, iterable=None, maxlen=None): if iterable is None: self.q = [] else: self.q = list(iterable) + if maxlen is not None: + if not isinstance(maxlen, int): + raise TypeError("" "an integer is required") + if maxlen < 0: + raise ValueError("" "maxlen must be non-negative") + self.__maxlen = maxlen def popleft(self): return self.q.pop(0) - def popright(self): - return self.q.pop() - def pop(self): return self.q.pop() def append(self, a): self.q.append(a) + if self.__maxlen is not None and len(self.q) > self.__maxlen: + self.popleft() def appendleft(self, a): self.q.insert(0, a) + if self.__maxlen is not None and len(self.q) > self.__maxlen: + self.pop() def extend(self, a): + if len(self.q) + len(a) > self.__maxlen: + raise IndexError self.q.extend(a) + @property + def maxlen(self): + return self.__maxlen + def __len__(self): return len(self.q) From 908d2a36626ba005fbeb3150711cd4dc6ffefd3e Mon Sep 17 00:00:00 2001 From: Andrew Leech Date: Wed, 6 Jul 2022 15:31:40 +1000 Subject: [PATCH 2/3] collections.deque: Add clear and __getitem__ support. --- python-stdlib/collections.deque/collections/deque.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python-stdlib/collections.deque/collections/deque.py b/python-stdlib/collections.deque/collections/deque.py index 618fc3288..db9f5d52c 100644 --- a/python-stdlib/collections.deque/collections/deque.py +++ b/python-stdlib/collections.deque/collections/deque.py @@ -32,6 +32,9 @@ def extend(self, a): raise IndexError self.q.extend(a) + def clear(self): + self.q.clear() + @property def maxlen(self): return self.__maxlen @@ -47,3 +50,6 @@ def __iter__(self): def __str__(self): return "deque({})".format(self.q) + + def __getitem__(self, idx): + return self.q[idx] From a15208c005c1e1049c779c77b25ab1acf5249635 Mon Sep 17 00:00:00 2001 From: Andrew Leech Date: Mon, 11 Jul 2022 11:28:55 +1000 Subject: [PATCH 3/3] collections.deque: Add remove function. --- python-stdlib/collections.deque/collections/deque.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python-stdlib/collections.deque/collections/deque.py b/python-stdlib/collections.deque/collections/deque.py index db9f5d52c..9017a575b 100644 --- a/python-stdlib/collections.deque/collections/deque.py +++ b/python-stdlib/collections.deque/collections/deque.py @@ -17,6 +17,9 @@ def popleft(self): def pop(self): return self.q.pop() + def remove(self, a): + return self.q.remove(a) + def append(self, a): self.q.append(a) if self.__maxlen is not None and len(self.q) > self.__maxlen: