1 #!/usr/bin/env python 2 3 def itermerge(seq1, seq2): 4 5 "Merge 'seq1' and 'seq2' to produce an ordered, combined list of results." 6 7 results = [] 8 9 iter1 = iter(seq1) 10 iter2 = iter(seq2) 11 12 t1 = None 13 t2 = None 14 15 t1 = _itermerge_next(iter1) 16 if t1 is None: 17 _itermerge_fill(iter2, results) 18 return results 19 20 while 1: 21 if t1 is None: 22 t1 = _itermerge_next(iter1) 23 if t1 is None: 24 results.append(t2) 25 _itermerge_fill(iter2, results) 26 return results 27 else: 28 t2 = _itermerge_next(iter2) 29 if t2 is None: 30 results.append(t1) 31 _itermerge_fill(iter1, results) 32 return results 33 34 if t1 < t2: 35 results.append(t1) 36 t1 = None 37 else: 38 results.append(t2) 39 t2 = None 40 41 def _itermerge_next(iter): 42 try: 43 return iter.next() 44 except StopIteration: 45 return None 46 47 def _itermerge_fill(iter, results): 48 try: 49 while 1: 50 results.append(iter.next()) 51 except StopIteration: 52 pass 53 54 # vim: tabstop=4 expandtab shiftwidth=4