如何在Python中删除列表的范围(子部分)?

如何在Python中删除列表的范围(子部分)?,python,list,Python,List,我有一个简单的、总是连续排列的列表,如下所示: all = [ 1, 2, 3, 4, 5, 6 ] # same as range( 1, 7 ) 我还有current=4。最后,我希望all列表如下所示 altered = [ 1, 2, 5, 6 ] altered = [ 1, 2, 3, 4, 5 ] 因此,它删除了当前的编号和之前的编号3 current也可以是1和0,因此我想确保它不会对这两个值抛出错误 对于异常current=0,更改后的列表如下 altered = [ 1

我有一个简单的、总是连续排列的列表,如下所示:

all = [ 1, 2, 3, 4, 5, 6 ] # same as range( 1, 7 )
我还有
current=4
。最后,我希望
all
列表如下所示

altered = [ 1, 2, 5, 6 ]
altered = [ 1, 2, 3, 4, 5 ]
因此,它删除了当前的编号和之前的编号
3

current
也可以是
1
0
,因此我想确保它不会对这两个值抛出错误

对于异常
current=0
,更改后的列表如下

altered = [ 1, 2, 5, 6 ]
altered = [ 1, 2, 3, 4, 5 ]
这意味着
current=0
只删除最后一个数字

我觉得你可能可以用生成器编写一些奇特的代码,但我写它们很烂

提前谢谢

一行完成此操作可获得积分。如果
current=0
太麻烦,那么它也可能是
current=-1
current=7

编辑:确保检查
current=1
,该值应为

altered = [ 2, 3, 4, 5, 6 ]

这样行吗

>>> all = range(1, 7)
>>> new = all[:2]+all[4:]
>>> print new
[1, 2, 5, 6]
all[:max(current-2,0)]+all[max(current,0):][:-1]+all[-1:][*(0
顺便说一句,这将保持原始列表不变。
当前=0
必须删除最后的值
6
,正如霍布斯3提到的那样。我觉得这应该是可行的,但对于
当前=0
:-(
[如果项目中的项目为所有项目!=当前和项目!=当前-1或当前==0和项目!=len(全部)]
哦,我没有注意到6也被删除了。:pNice!这也适用于
current=7
。是否可以使它删除
current=0
的最后一个数字?那就太完美了!如果current=0:
all=all[:-1],我只是简单地做了
。这也使代码更易于阅读。当current==4时,4是从列表中删除的,因为它的值为4,或者因为它位于第四个位置(从1开始计数时)?类似地,删除3是因为它是小于4的最小数字,还是因为它位于删除项之前的索引上?列表始终是一个
范围()
,因此不管您将其视为位置还是值。不要调用列表
all
,因为有一个内置函数
all()
,一旦您使用该名称,就无法访问该名称。
>>> all = range(1,7)
>>> current = 4
>>> [item for item in all if item != current and item != current-1]
[1, 2, 5, 6]
>>> current = 0
>>> [item for item in all if item != current and item != current-1]
[1, 2, 3, 4, 5, 6]
all[:max(current-2,0)] + all[max(current,0):][:-1] + all[-1:]*(0 < current < len(all))