[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/