Программа 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
Ответы
Ответ 1
Если 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
Ответ 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)
.
Ответ 3
def zigzag(seq):
return seq[::2], seq[1::2]