def sample(n, r):
"Generate r randomly chosen, sorted integers from [0,n)"
rand = random.random
pop = n
for samp in xrange(r, 0, -1):
cumprob = 1.0
x = rand()
while x < cumprob:
cumprob -= cumprob * samp / pop
pop -= 1
yield n-pop-1
# Example call to select three samples in range(0,10)
>>> list(sample(10, 3))
[2, 7, 8]