# curdle a list

kevin parks kp87 at lycos.com
Fri Jul 20 04:27:13 CEST 2001

```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 at lycos.com

```