how to choose element from list based on probabilities?
Sidharthk
sidharthk at hotmail.com
Sun Nov 16 06:24:00 EST 2003
sidharthk at hotmail.com (Sidharthk) wrote in message news:<8d02ff63.0311150944.3e709a49 at posting.google.com>...
> import random
> import math
> def getCircleMaker(circleList):
> circleList = list(circleList)
> circleList.sort(lambda a, b: cmp(b.r, a,r))
> def workerFunc():
> pos = int(random.randrange(len(circleList)**2)**0.5)
> return circleList.pop(pos)
> return workerFunc
>
>
>
My earlier example wont work. It orders the list incorrectly so you
are more likely to end up with a smaller circle.
here's a corrected example.
class Circle:
def __init__(self, x,y,r):
self.center =(x,y)
self.r = r
import random
def getCircleMaker(circleList):
circleList = list(circleList)
circleList.sort(lambda a, b: cmp(a.r, b.r))
pow = 4
def workerFunc():
pos = int(random.randrange(len(circleList)**pow)**(1.0/pow))
return circleList.pop(pos)
return workerFunc
circlelist = [Circle(0,0,random.randrange(100)) for e in range(100)]
getCircle = getCircleMaker(circlelist)
Changing the value of pow will affect the probability of getting a
larger circle. The larger the value of pow the higher the chance.
More information about the Python-list
mailing list