python头和尾巴在一条线

在第一个元素中解压一个列表和用单个命令“尾部”是python的方法吗?

例如:

>> head, tail = **some_magic applied to** [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] >> head 1 >>> tail [1, 2, 3, 5, 8, 13, 21, 34, 55] 

在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下执行相同的操作(无需创build临时列表),则必须执行此操作:

 it = iter(iterable) head = it.next() tail = list(it) 

当然,如果你在列表中工作,没有3.x语法的最简单的方法是:

 head, tail = seq[0], seq[1:] 
 >>> mylist = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] >>> head, tail = mylist[0], mylist[1:] >>> head 1 >>> tail [1, 2, 3, 5, 8, 13, 21, 34, 55] 

对于O(1) head,tail操作的复杂性,你应该使用deque

以下方式:

 from collections import deque l = deque([1,2,3,4,5,6,7,8,9]) head, tail = l.popleft(), l 

当你必须迭代列表中的所有元素时,这很有用。 例如,在合并sorting中天真的合并2个分区。

Python 2,使用lambda

 >>> head, tail = (lambda lst: (lst[0], lst[1:]))([1, 1, 2, 3, 5, 8, 13, 21, 34, 55]) >>> head 1 >>> tail [1, 2, 3, 5, 8, 13, 21, 34, 55]