From c00713debbdde3326dfa6979be62f61e1f59343f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Ogam?= Date: Mon, 28 Mar 2022 09:17:26 +0200 Subject: [PATCH 1/7] Move additional code out of a try clause in function Sequence.index --- Lib/_collections_abc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index 86eb042e3a75ab..e96e4c35355860 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -1022,10 +1022,10 @@ def index(self, value, start=0, stop=None): while stop is None or i < stop: try: v = self[i] - if v is value or v == value: - return i except IndexError: break + if v is value or v == value: + return i i += 1 raise ValueError From 23debfcfbb63b5352ca6015eda20c9483f8eba1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Ogam?= Date: Wed, 30 Mar 2022 16:37:01 +0200 Subject: [PATCH 2/7] Remove unnecessary call to built-in function reversed --- Lib/_collections_abc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index e96e4c35355860..3ebcbc66213801 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -1003,7 +1003,7 @@ def __contains__(self, value): return False def __reversed__(self): - for i in reversed(range(len(self))): + for i in range(len(self) - 1, -1, -1): yield self[i] def index(self, value, start=0, stop=None): From a0683e5c5216db06a8271f75ccee2cd500d9e3e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Ogam?= Date: Wed, 30 Mar 2022 17:04:40 +0200 Subject: [PATCH 3/7] Simplify the implementation of function Sequence.index with slicing --- Lib/_collections_abc.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index 3ebcbc66213801..6c3a6589c3d179 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -1013,20 +1013,10 @@ def index(self, value, start=0, stop=None): Supporting start and stop arguments is optional, but recommended. ''' - if start is not None and start < 0: - start = max(len(self) + start, 0) - if stop is not None and stop < 0: - stop += len(self) - - i = start - while stop is None or i < stop: - try: - v = self[i] - except IndexError: - break + for i in range(len(sequence))[start:stop]: + v = self[i] if v is value or v == value: return i - i += 1 raise ValueError def count(self, value): From 3a43558840c6723a3fc37f896aae99f794324d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Ogam?= Date: Wed, 30 Mar 2022 17:47:01 +0200 Subject: [PATCH 4/7] Update Lib/_collections_abc.py Co-authored-by: Oleg Iarygin --- Lib/_collections_abc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index 6c3a6589c3d179..181fa6229a9b95 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -1013,7 +1013,7 @@ def index(self, value, start=0, stop=None): Supporting start and stop arguments is optional, but recommended. ''' - for i in range(len(sequence))[start:stop]: + for i in range(len(self))[start:stop]: v = self[i] if v is value or v == value: return i From 0ae076fb18e58fa95c51f0bff58e96d9efe7c29e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Ogam?= Date: Wed, 30 Mar 2022 17:52:20 +0200 Subject: [PATCH 5/7] Remove temporary self copy when a sequence extends itself in MutableSequence.extend --- Lib/_collections_abc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index 181fa6229a9b95..cbcb1a367c7a36 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -1084,7 +1084,8 @@ def reverse(self): def extend(self, values): 'S.extend(iterable) -- extend sequence by appending elements from the iterable' if values is self: - values = list(values) + for i in range(len(values)): + self.append(values[i]) for v in values: self.append(v) From 32115dbe1729ac31e818e8bce65724e02a92069f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Ogam?= Date: Wed, 30 Mar 2022 17:53:55 +0200 Subject: [PATCH 6/7] Remove temporary self copy when a sequence extends itself in MutableSequence.extend (fix) --- Lib/_collections_abc.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index cbcb1a367c7a36..71c6fe82c8dfaa 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -1086,8 +1086,9 @@ def extend(self, values): if values is self: for i in range(len(values)): self.append(values[i]) - for v in values: - self.append(v) + else: + for v in values: + self.append(v) def pop(self, index=-1): '''S.pop([index]) -> item -- remove and return item at index (default last). From f988b0202a1ca08bd8ef53a47fbf31f231a6de80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Ogam?= Date: Wed, 30 Mar 2022 18:29:08 +0200 Subject: [PATCH 7/7] Undo the change to Sequence.__reversed__ --- Lib/_collections_abc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index 71c6fe82c8dfaa..6cef19033b8346 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -1003,7 +1003,7 @@ def __contains__(self, value): return False def __reversed__(self): - for i in range(len(self) - 1, -1, -1): + for i in reversed(range(len(self))): yield self[i] def index(self, value, start=0, stop=None):