如何从列表中分割中间元素

2022-03-26 00:00:00 python slice

问题描述

相当简单的问题。假设我有如下列表:

a = [3, 4, 54, 8, 96, 2]

我是否可以使用切片来省略列表中间的元素,以生成类似以下内容的内容?

a[some_slicing]
[3, 4, 8, 96, 2]

是省略了元素54。我早就猜到这会奏效:

a[:2:]

但结果与我预期的不同:

[3, 4]

解决方案

不能用单个切片模拟POP,因为一个切片只提供单个开始和结束索引。

但是,您可以使用两个切片:

>>> a = [3, 4, 54, 8, 96, 2]
>>> a[:2] + a[3:]
[3, 4, 8, 96, 2]

您可以将其封装到一个函数中:

>>> def cutout(seq, idx):
        """
        Remove element at `idx` from `seq`.
        TODO: error checks.
        """
        return seq[:idx] + seq[idx + 1:]

>>> cutout([3, 4, 54, 8, 96, 2], 2)
[3, 4, 8, 96, 2]
但是,pop将是faster。列表弹出函数在listobject.c中定义。

相关文章