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

Python 如何从列表中分割中间元素,python,slice,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] >>&g

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

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]

然而,这将是一个巨大的挑战。list pop函数在中定义。

将这两部分分别切片并添加这些列表

a[:2] + a[3:]

要删除项目就地调用,请执行以下操作:

your_list.pop(index)

它将返回已删除的项目,并更改
您的_列表

以处理任何大小的列表:

a.pop((len(a)-1)//2)

这是最简单的答案:

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

>>>a、 移除(54)

[3,4,8,96,2]


我会列出一份理解清单:

>>> a = [3, 4, 54, 8, 96, 2]
>>> a_ = [list(j for idx, j in enumerate(a) if idx != 2)]
>>> [3, 4, 8, 96, 2]

我不明白你所说的切片和从列表中弹出一个元素之间有什么区别?…我真的看不出有什么区别?…你在这里称之为切片的目的是什么?而不是删除一个元素?因为我不想从列表中删除一个元素,我想解压它的元素,在中间去掉一个:例如:
a1,a2,a3,a4,a5=a[:2:
(这当然不起作用)人们如果你要投反对票,请留下评论,这样我就知道你为什么认为这个问题没有价值了?否则,我无法修复它,也无法从中学到任何东西来避免将来的问题。我相信问题是,你是否可以用一片来弹出,答案是否定的。同样,请看这个。铁拳,最大的区别是前者返回一个列表,而后者不返回任何列表。对于那些喜欢干净、优雅的解决方案的人来说,能够将一个操作的结果传递到下一个操作是很重要的。谢谢miku,我想知道是否有一种方法可以使用列表中的一个部分来实现这一点,但我想答案只是“不”但是,在大型列表上,这可能会非常慢,因为
索引之后的所有内容都需要向前移动。在大型列表上,这比切片复制速度要快得多
timeit.timeit('your_list.pop(1)'、setup='your_list=range(10**6)',number=1000)
→ <代码>1.010901927947998
timeit.timeit('your_list=your_list[:4]+your_list[5:],'setup='your_list=range(10**6)',number=1000)
→ <代码>23.652629137039185@KlausD.,谢谢您的时间。在我的答案中链接您的答案。这是我一直在寻找的。这不是一个好的解决方案,好像数字未知,但只希望过滤出位置/inex。