Take advantage of math.comb() in the nth_combination() recipe (#93027)

This commit is contained in:
Raymond Hettinger 2022-05-20 18:02:33 -05:00 committed by GitHub
parent d59b2d0441
commit 59719a242d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -992,12 +992,7 @@ which incur interpreter overhead.
"Equivalent to list(combinations(iterable, r))[index]"
pool = tuple(iterable)
n = len(pool)
if r < 0 or r > n:
raise ValueError
c = 1
k = min(r, n-r)
for i in range(1, k+1):
c = c * (n - k + i) // i
c = math.comb(n, r)
if index < 0:
index += c
if index < 0 or index >= c:
@ -1071,6 +1066,7 @@ which incur interpreter overhead.
>>> import operator
>>> import collections
>>> import math
>>> take(10, count())
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]