如何从列表中分割中间元素
问题描述
相当简单的问题。假设我有如下列表:
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中定义。
相关文章