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]