Commit fdbe5223 authored by Raymond Hettinger's avatar Raymond Hettinger

SF bug #753602: random.sample not properly documented

The docs were fine but the "int=int" in the function call was both
ugly and confusing.  Moved it inside the body of the function definition.
parent 43e559a1
...@@ -207,7 +207,7 @@ class Random(_random.Random): ...@@ -207,7 +207,7 @@ class Random(_random.Random):
j = int(random() * (i+1)) j = int(random() * (i+1))
x[i], x[j] = x[j], x[i] x[i], x[j] = x[j], x[i]
def sample(self, population, k, int=int): def sample(self, population, k):
"""Chooses k unique random elements from a population sequence. """Chooses k unique random elements from a population sequence.
Returns a new list containing elements from the population while Returns a new list containing elements from the population while
...@@ -240,19 +240,20 @@ class Random(_random.Random): ...@@ -240,19 +240,20 @@ class Random(_random.Random):
if not 0 <= k <= n: if not 0 <= k <= n:
raise ValueError, "sample larger than population" raise ValueError, "sample larger than population"
random = self.random random = self.random
_int = int
result = [None] * k result = [None] * k
if n < 6 * k: # if n len list takes less space than a k len dict if n < 6 * k: # if n len list takes less space than a k len dict
pool = list(population) pool = list(population)
for i in xrange(k): # invariant: non-selected at [0,n-i) for i in xrange(k): # invariant: non-selected at [0,n-i)
j = int(random() * (n-i)) j = _int(random() * (n-i))
result[i] = pool[j] result[i] = pool[j]
pool[j] = pool[n-i-1] # move non-selected item into vacancy pool[j] = pool[n-i-1] # move non-selected item into vacancy
else: else:
selected = {} selected = {}
for i in xrange(k): for i in xrange(k):
j = int(random() * n) j = _int(random() * n)
while j in selected: while j in selected:
j = int(random() * n) j = _int(random() * n)
result[i] = selected[j] = population[j] result[i] = selected[j] = population[j]
return result return result
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment