如何将迭代器分为两个具有交替元素的列表

问题描述

如果seq一个序列,则:

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

如果seq是完全通用的可迭代对象,例如生成器:

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

解决方法

我想将迭代器分为两个具有交替元素的列表。这是一个可行的解决方案。但是,有没有更简单的方法可以达到相同目的呢?

def zigzag(seq):
    """Return two sequences with alternating elements from `seq`"""
    x,y = [],[]
    p,q = x,y
    for e in seq:
        p.append(e)
        p,q = q,p
    return x,y

样本输出:

>>> zigzag('123456')
(['1','3','5'],['2','4','6'])