如何将迭代器分为两个具有交替元素的列表 [英] How to split an iterable into two lists with alternating elements

查看:49
本文介绍了如何将迭代器分为两个具有交替元素的列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用一个交替的元素将一个可迭代对象分成两个列表.这是一个可行的解决方案.但是,有没有更简单的方法可以达到相同的目的?

I want to split an iterable into two lists with alternating elements. Here is a working solution. But is there a simpler way to achieve the same?

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'])

推荐答案

如果 seq 是一个序列,则:

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

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

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

这篇关于如何将迭代器分为两个具有交替元素的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆