Skip to content

Instantly share code, notes, and snippets.

@metula
Created February 14, 2014 22:05
Show Gist options
  • Save metula/9010387 to your computer and use it in GitHub Desktop.
Save metula/9010387 to your computer and use it in GitHub Desktop.
def natural():
"""A generator for all natural numbers."""
n = 1
while True:
yield n
n += 1
def fib():
"""A generator for all Fibonacci numbers."""
a, b = 0, 1
while True:
yield b
a, b = b, a + b
def merge(iter1, iter2):
"""Produces the sorted merge of two sorted infinite iterators."""
left = next(iter1)
right = next(iter2)
while True:
if left < right:
yield(left)
left = next(iter1)
else:
yield(right)
right = next(iter2)
def merge3(iter1, iter2):
"""Produces the sorted merge of two sorted iterators."""
left = next(iter1)
right = next(iter2)
while True:
if left < right:
yield(left)
try:
left = next(iter1)
except StopIteration: # iter1 is exhausted
yield(right)
remaining = iter2
break
else:
yield(right)
try:
right = next(iter2)
except StopIteration: # iter2 is exhausted
yield(left)
remaining = iter1
break
for elem in remaining:
yield(elem)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment