当前位置: 首页 > 面试题库 >

头尾一条线

孙辰阳
2023-03-14
问题内容

有没有一种pythonic方式可以在单个命令中解压缩第一个元素和“ tail”中的列表?

例如:

>> 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-扩展的可迭代拆包中
对此进行了描述。这也具有处理任何可迭代的,而不仅仅是序列的优点。

它也 确实 可读。

如PEP中所述,如果要在2.x下执行等效操作(可能不创建临时列表),则必须执行以下操作:

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

如评论中所述,这也提供了获得默认值head而不是引发异常的机会。如果您要执行此操作,请next()使用可选的第二个参数作为默认值,如果没有head元素,next(it, None)则会提供给您None

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

head, tail = seq[0], seq[1:]


 类似资料:
  • 问题内容: Java 8引入了一个类似于Scala的Stream的Stream类,它是一个强大的惰性构造,使用它可以非常简洁地执行以下操作: 我想知道是否可以在Java 8中执行此操作,所以我写了如下代码: 相当简单,但它产生的原因是和都是终端操作,只能在该终端上执行一次。 我真的不需要用完两次流,因为我需要的只是流中的第一个数字,其余作为另一个流,即Scala 和的等效项。Java 8 中是否可

  • 我正在尝试为我的链表类创建一个添加和删除方法。我写了两封信,名字是Head和Tail。 头- 当我试图删除特定节点时,我一直遇到问题,因为Java说我越界了。我想是因为我的头没有指向第一个节点?你们觉得怎么样?还是我完全走错路了...

  • 1. HashMap底层实现 2. 解释一下volatile 3. volite能保证线程安全吗 4. 索引优化有哪些(没说全) 5. 存储引擎了解哪些,介绍一下 6. 大概描述一下B+树在mysql里的实现 7. B+树插入数据的流程 8. 叶子节点满了,叶子节点最大有多少(...) 9. 默认事务级别,怎么实现 10. MVCC是怎么实现的 11. Redis有哪些数据结构? 12. list

  • 本文向大家介绍利用jquery去掉时光轴头尾部线条的方法实例,包括了利用jquery去掉时光轴头尾部线条的方法实例的使用技巧和注意事项,需要的朋友参考一下 前言 以前做类似时光轴的结构,几乎都是一条灰色线飞流直下,没有尽头。今天这个线条是从第一个圆点到最后一个圆点,那么问题来了,内容的高度还不是固定的,线条的长度怎么确定?怎么就能刚刚好从第一个点到最后一个点首尾相连呢?这就是下面所要做的。 先看效

  • 问题内容: 假设您有一个txt文件,同时查看文件的前10行和后10行的命令是什么? 即,如果文件长200行,则可以一次性查看1-10行和190-200行。 问题答案: 您可以简单地: 如果由于某种原因需要使用管道,则如下所示: 注意:如果file.txt中的行数小于默认的head行+默认的tail行,则将打印重复的行。

  • 问题内容: 我试图得到这两种递归策略之间的区别。 我被告知的定义如下: 尾递归: 如果调用返回后无需执行任何操作,则调用为尾递归,即当调用返回时,立即从调用函数返回返回的值 Head递归: 当函数的第一条语句是递归调用时,调用是head递归的。 问题答案: 在中,递归调用在发生时先于函数中的其他处理(考虑它发生在函数的顶部或头部)。 在中,情况恰恰相反—处理发生在递归调用之前。在这两种递归样式之间