I'm surprised noone has pursued a course of subtraction rather than division. Say you want 10 numbers:
>>> s = 1.0 >>> n = [] >>> for x in xrange(9): ... value = random.random() * s ... n.append(value) ... s -= value ... >>> n.append(s) >>> n [0.7279111122901516, 0.082128708606867745, 0.0080516733577621798, 0.12122060245902817, 0.0034460458833209676, 0.0021046234724371184, 0.054109424914363845, 0.00035750970249204185, 0.00051175075536832372, 0.00015854855820800087] >>> sum(n) 1.0 Either: 1) Just because they're *ordered* doesn't mean they're not *random*, or 2) You all now know why I'm not a mathematician. ;) It seems to me that the only constraint on the randomness of my results is the OP's constraint: that they sum to 1. I'd be fascinated to learn if and why that wouldn't work. Robert Brewer System Architect Amor Ministries [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list