How to split an iterable into two lists with alternating elements

If seq is a sequence, then:

def zigzag(seq):
  return seq[::2], seq[1::2]

If seq is a totally generic iterable, such as possibly a generator:

def zigzag(seq):
  results = [], []
  for i, e in enumerate(seq):
    results[i%2].append(e)
  return results

Leave a Comment