[Tutor] curdling seq

kevin parks kp87@lycos.com
Wed, 18 Jul 2001 08:18:24 +0900


I've got a little function that takes a list and subdivides 
it randomly. so that i can say:

>>> x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
>>> clump.clump(x)

and it will return a list like any of the below lists:

[[1], [2, 3], [4], [5, 6, 7, 8, 9], [10, 11, 12], [13, 14], [15], [16, 17], [18], [19, 20, 21], [22], [23, 24]]
[[1, 2, 3, 4, 5], [6, 7], [8, 9, 10, 11, 12], [13, 14], [15, 16], [17, 18, 19, 20], [21, 22], [23, 24]]
[[1], [2, 3, 4], [5, 6], [7, 8], [9, 10, 11, 12, 13, 14], [15, 16, 17], [18], [19], [20, 21, 22], [23, 24]]
[[1, 2, 3, 4], [5, 6], [7, 8], [9], [10, 11, 12, 13], [14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]
[[1, 2], [3], [4, 5], [6, 7], [8], [9], [10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], [21, 22], [23, 24]]

So, now what i'd like to do is make a function that would be like:

curdle(seq, prob)

where prob is the probability that there will be a partition between any two elements.


So that should be something like:

import random

def curdle(seq, Prob):
	if not seq:
		return []
	result = [seq[:1]]
	for e in seq[1:]:
		# either extend last clump or start a new one, depending on Prob
		if random.random() < Prob:
			# extend last lump
			result[-1].append(e)
		else:
			# start a new lump
			result.append([e])
	return result
	
But, i am not 100% sure i am getting the right results. It seems as though
i am, but i was hoping that if it was off someone with knowledge of testing randomness
would give it the once over. Prob set to 0.5 should
give me 50% chance of a new subsequence. 0.0 should give me subdivisions all the time
and 1.0 should give me the flat list back (or rather on big list nested as an element
inside the list.


cheers,

kevin parks
Seoul, Korea

kp87@lycos.com







Get 250 color business cards for FREE!
http://businesscards.lycos.com/vp/fastpath/