Python-Programm, um eine Liste in zwei Listen mit alternierenden Elementen aufzuteilen

Können Sie es einfacher / elegant machen?

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 

  • Algorithmus zur Erzeugung einer Baumzersetzung
  • Wie ist __hash__ in Python 3.2 implementiert?
  • OrderedDict Leistung (verglichen mit deque)
  • Zählkombinationen und Permutationen effizient zu zählen
  • Erzeugen von nicht aufeinanderfolgenden Kombinationen
  • Rucksack-Zwangspython
  • 3 Solutions collect form web for “Python-Programm, um eine Liste in zwei Listen mit alternierenden Elementen aufzuteilen”

    Wenn seq , wie Sie sagen, ist eine Liste, dann:

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

    Wenn seq ist eine total generische iterable, wie möglicherweise ein Generator:

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

    Dies führt einen Iterator und gibt zwei Iteratoren zurück:

     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 

    Wenn Sie Listen bevorzugen, dann können Sie return list(even),list(odd) .

     def zigzag(seq): return seq[::2], seq[1::2] 
    Python ist die beste Programmiersprache der Welt.