[Python-checkins] Permutations Python code equivalent in comment was invalid for Python 3 (GH-16927)

Raymond Hettinger webhook-mailer at python.org
Tue Oct 29 01:10:31 EDT 2019


https://github.com/python/cpython/commit/0078a0c2a59a358fa032ec9847c108378b66b656
commit: 0078a0c2a59a358fa032ec9847c108378b66b656
branch: master
author: Sergey <bizywiz at gmail.com>
committer: Raymond Hettinger <rhettinger at users.noreply.github.com>
date: 2019-10-28T22:10:24-07:00
summary:

Permutations Python code equivalent in comment was invalid for Python 3 (GH-16927)

files:
M Modules/itertoolsmodule.c

diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index e60ad5bec43c6..3d39fa2e4737b 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -3076,12 +3076,15 @@ static PyTypeObject cwr_type = {
 /* permutations object ********************************************************
 
 def permutations(iterable, r=None):
-    'permutations(range(3), 2) --> (0,1) (0,2) (1,0) (1,2) (2,0) (2,1)'
+    # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
+    # permutations(range(3)) --> 012 021 102 120 201 210
     pool = tuple(iterable)
     n = len(pool)
     r = n if r is None else r
-    indices = range(n)
-    cycles = range(n-r+1, n+1)[::-1]
+    if r > n:
+        return
+    indices = list(range(n))
+    cycles = list(range(n, n-r, -1))
     yield tuple(pool[i] for i in indices[:r])
     while n:
         for i in reversed(range(r)):



More information about the Python-checkins mailing list