def join(seq, join_predicate, join): prev = None has_prev = False for item in seq: if not has_prev: prev = item has_prev = True else: if join_predicate(prev, item): prev = join(prev, item) else: yield prev prev = item if prev: yield prev def filter_chain(filters, seq): for item in seq: for f in filters: if f(item): break else: yield item def most_frequent_item(d): # use key in 2.5 return max([(v, k) for k, v in d.iteritems()])[1]