Tyler Smith wrote: > iflist = ifstring.replace('\n', ' ').split()
The replace is not needed, split() splits on any whitespace including newlines. > # build hash of form (prefix1, prefix2): [word] > word_hash = {} > for i in range(len(iflist) - 2): > pr1 = iflist[i] > pr2 = iflist[i+1] > tv = iflist[i+2] > tk = (pr1, pr2) or, tk = tuple(iflist[i:i+2]) > if word_hash.has_key(tk) and tv not in word_hash[tk]: > word_hash[tk].append(tv) > else: > word_hash[tk] = [tv] This could be done much more cleanly with a defaultdict that maps a pair to a set: from collections import defaultdict wordhash = defaultdict(set) ...then just wordhash[tk].add(tv) > if word_hash.has_key((iflist[-2], iflist[-1])): > word_hash[(iflist[-2], iflist[-1])].append('\n') > else: > word_hash[(iflist[-2], iflist[-1])] = ['\n'] word_hash[(iflist[-2], iflist[-1])].add('\n') > # generate new words from hash > word_num = 0 > while w2 <> '\n' and word_num < word_max: > w1, w2 = w2, random.choice(word_hash[(w1, w2)]) > print w2, > word_num += 1 or, for word_num in range(word_max): w1, w2 = w2, random.choice(word_hash[(w1, w2)]) print w2, if w2 == '\n': break Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor