2024-06-10 20:39:28 发布
网友
你能让它更简单/优雅吗?
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是一个列表,那么:
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
它接受一个迭代器并返回两个迭代器:
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)。
return list(even),list(odd)
如果如你所说,
seq
是一个列表,那么:如果
seq
是完全通用的iterable,例如可能是生成器:它接受一个迭代器并返回两个迭代器:
如果您喜欢列表,那么可以
return list(even),list(odd)
。相关问题 更多 >
编程相关推荐