Python程序将一个列表分成两个具有交替元素的列表

2024-06-10 20:39:28 发布

您现在位置:Python中文网/ 问答频道 /正文

你能让它更简单/优雅吗?

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

Tags: infromforreturndefwithelementsseq
3条回答

如果如你所说,seq是一个列表,那么:

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

如果seq是完全通用的iterable,例如可能是生成器:

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

它接受一个迭代器并返回两个迭代器:

import itertools
def zigzag(seq):
    t1,t2 = itertools.tee(seq)
    even = itertools.islice(t1,0,None,2)
    odd = itertools.islice(t2,1,None,2)
    return even,odd

如果您喜欢列表,那么可以return list(even),list(odd)

相关问题 更多 >