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

时间:2012-04-10 07:08:01

标签: python list

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

all = [ 1, 2, 3, 4, 5, 6 ] # same as range( 1, 7 )

我也有current = 4。最后,我希望all列表看起来像这样

altered = [ 1, 2, 5, 6 ]

所以发生的事情是删除了current号码和之前的号码 3

current也可以是10,因此我想确保它不会为这两个值引发错误。

对于异常current = 0,更改后的列表就像这样

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

这意味着current = 0只删除最后一个数字。

我觉得你可能用编辑器编写一些花哨的东西,但我很难写它们。

提前致谢!

在一行中执行此操作的

奖励积分。如果current = 0太麻烦,那么它也可能是current = -1current = 7

编辑:请务必检查current = 1,这应该是

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

4 个答案:

答案 0 :(得分:13)

all = all[:max(current - 2, 0)] + all[current:]

del all[max(current - 2, 0):current]

答案 1 :(得分:1)

这会有用吗?

>>> all = range(1, 7)
>>> new = all[:2]+all[4:]
>>> print new
[1, 2, 5, 6]

答案 2 :(得分:1)

all[:max(current-2,0)] + all[max(current,0):][:-1] + all[-1:]*(0 < current < len(all))

答案 3 :(得分:0)

>>> 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]