Gia*_*nio 81 python list tail head
有没有pythonic方法解压缩第一个元素中的列表和单个命令中的"尾部"?
例如:
>> 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]
Run Code Online (Sandbox Code Playgroud)
Gar*_*tty 175
在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]
Run Code Online (Sandbox Code Playgroud)
3.x中的一个新功能是*
在解包时使用运算符,表示任何额外的值.它在PEP 3132 - 扩展的可迭代解包中进行了描述.这也具有处理任何可迭代的优点,而不仅仅是序列.
它也很可读.
如PEP中所述,如果您想在2.x下执行等效操作(无需创建临时列表),则必须执行以下操作:
it = iter(iterable)
head, tail = next(it), list(it)
Run Code Online (Sandbox Code Playgroud)
当然,如果您正在处理列表,没有3.x语法的最简单方法是:
head, tail = seq[0], seq[1:]
Run Code Online (Sandbox Code Playgroud)
fra*_*xel 35
>>> 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]
Run Code Online (Sandbox Code Playgroud)
但是,对于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
Run Code Online (Sandbox Code Playgroud)
当您必须遍历列表的所有元素时,它很有用.例如,在合并排序中的天真合并2个分区.