Под Python 3.x, вы можете сделать это красиво:
>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Новая функция 3.x заключается в использовании оператора *
распаковка, чтобы означает любые дополнительные значения. Он описан в PEP 3132 - Extended Iterable Unpacking. Это также имеет преимущество в работе над любыми итерабельными, а не только последовательностями.
Это также действительно читаемый.
Как описано в PEP, если вы хотите сделать эквивалент под 2.x (без потенциально сделать временный список), вы должны сделать это:
it = iter(iterable)
head = it.next()
tail = list(it)
Естественно, если вы работаете список, самый простой способ без синтаксиса 3.x является:
head, tail = seq[0], seq[1:]
Помните, что списки не реализованы как односвязные списки в Python, поэтому эта операция является дорогостоящей (как в: весь список необходимо скопировать). В зависимости от того, чего вы хотите достичь, это может быть или не быть проблемой. Я просто упоминаю об этом, потому что этот тип деструктурирования списка часто встречается в функциональных языках, где это действительно очень дешевая операция. –