Skip to content

Instantly share code, notes, and snippets.

@mweiden
Created May 16, 2018 21:57
Show Gist options
  • Save mweiden/35201c6f15b36d91fb377b31c93c34a6 to your computer and use it in GitHub Desktop.
Save mweiden/35201c6f15b36d91fb377b31c93c34a6 to your computer and use it in GitHub Desktop.
iters = [iter(t) for t in [(1, 2), (0, 2), (0, 2, 3)]]
def get(itr):
try:
return next(itr)
except StopIteration:
return None
def aligned_next(iters, old_min, old_head_values):
if old_head_values is None:
head_values = tuple(get(itr) for itr in iters)
else:
head_values = tuple(
get(iters[i]) if (old_head_values[i] is not None and old_head_values[i] == old_min)
else old_head_values[i]
for i in range(len(iters))
)
non_none_values = [v for v in head_values if v is not None]
if len(non_none_values) == 0:
raise StopIteration
min_value = min(non_none_values)
return min_value, head_values
min_value = None
head_values = None
while True:
try:
min_value, head_values = aligned_next(iters, min_value, head_values)
print(f"{min_value}, {head_values}")
except StopIteration:
break
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment