头尾在一条线上

2023-12-14

有没有一种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 - 扩展可迭代拆包。这还有一个优点,可以处理任何可迭代的对象,而不仅仅是序列。

这也是really可读。

如 PEP 中所述,如果您想在 2.x 下执行等效操作(无需创建临时列表),则必须执行以下操作:

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

正如评论中所指出的,这也提供了获得默认值的机会head而不是抛出异常。如果你想要这种行为,next()采用带有默认值的可选第二个参数,因此next(it, None)会给你None如果没有头元素。

当然,如果您正在处理列表,那么不使用 3.x 语法的最简单方法是:

head, tail = seq[0], seq[1:]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

头尾在一条线上 的相关文章

随机推荐