我有一个简单的,总是连续排序的列表,如下所示:
all = [ 1, 2, 3, 4, 5, 6 ] # same as range( 1, 7 )
我也有current = 4
。最后,我希望all
列表看起来像这样
altered = [ 1, 2, 5, 6 ]
所以发生的事情是删除了current
号码和之前的号码 3
。
current
也可以是1
和0
,因此我想确保它不会为这两个值引发错误。
对于异常current = 0
,更改后的列表就像这样
altered = [ 1, 2, 3, 4, 5 ]
这意味着current = 0
只删除最后一个数字。
我觉得你可能用编辑器编写一些花哨的东西,但我很难写它们。
提前致谢!
在一行中执行此操作的 奖励积分。如果current = 0
太麻烦,那么它也可能是current = -1
或current = 7
。
编辑:请务必检查current = 1
,这应该是
altered = [ 2, 3, 4, 5, 6 ]
答案 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]