1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/itermerge.py Wed Sep 09 01:18:04 2009 +0200
1.3 @@ -0,0 +1,54 @@
1.4 +#!/usr/bin/env python
1.5 +
1.6 +def itermerge(seq1, seq2):
1.7 +
1.8 + "Merge 'seq1' and 'seq2' to produce an ordered, combined list of results."
1.9 +
1.10 + results = []
1.11 +
1.12 + iter1 = iter(seq1)
1.13 + iter2 = iter(seq2)
1.14 +
1.15 + t1 = None
1.16 + t2 = None
1.17 +
1.18 + t1 = _itermerge_next(iter1)
1.19 + if t1 is None:
1.20 + _itermerge_fill(iter2, results)
1.21 + return results
1.22 +
1.23 + while 1:
1.24 + if t1 is None:
1.25 + t1 = _itermerge_next(iter1)
1.26 + if t1 is None:
1.27 + results.append(t2)
1.28 + _itermerge_fill(iter2, results)
1.29 + return results
1.30 + else:
1.31 + t2 = _itermerge_next(iter2)
1.32 + if t2 is None:
1.33 + results.append(t1)
1.34 + _itermerge_fill(iter1, results)
1.35 + return results
1.36 +
1.37 + if t1 < t2:
1.38 + results.append(t1)
1.39 + t1 = None
1.40 + else:
1.41 + results.append(t2)
1.42 + t2 = None
1.43 +
1.44 +def _itermerge_next(iter):
1.45 + try:
1.46 + return iter.next()
1.47 + except StopIteration:
1.48 + return None
1.49 +
1.50 +def _itermerge_fill(iter, results):
1.51 + try:
1.52 + while 1:
1.53 + results.append(iter.next())
1.54 + except StopIteration:
1.55 + pass
1.56 +
1.57 +# vim: tabstop=4 expandtab shiftwidth=4