Unter Python 3.x können Sie dies gut tun:
>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Eine neue Funktion in 3.x ist die Verwendung des *
Operators beim Auspacken, um zusätzliche Werte zu bezeichnen. Es ist in PEP 3132 - Erweitertes iterierbares Auspacken beschrieben . Dies hat auch den Vorteil, dass an iterierbaren Sequenzen gearbeitet werden kann, nicht nur an Sequenzen.
Es ist auch sehr gut lesbar.
Wie im PEP beschrieben, müssen Sie Folgendes tun, wenn Sie das Äquivalent unter 2.x ausführen möchten (ohne möglicherweise eine temporäre Liste zu erstellen):
it = iter(iterable)
head, tail = next(it), list(it)
Wie in den Kommentaren erwähnt, bietet dies auch die Möglichkeit, einen Standardwert für zu erhalten, head
anstatt eine Ausnahme auszulösen. Wenn Sie dieses Verhalten wünschen, verwenden Sie next()
ein optionales zweites Argument mit einem Standardwert. Wenn next(it, None)
Sie None
also kein head-Element hätten, würden Sie dies angeben.
Wenn Sie an einer Liste arbeiten, ist der einfachste Weg ohne die 3.x-Syntax natürlich:
head, tail = seq[0], seq[1:]