24

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

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

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

altered = [ 1, 2, 5, 6 ]

所以发生的事情是它删除了current数字和它之前 3的数字。

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

除了例外current = 0,更改后的列表是这样的

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

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

我觉得你可能可以用生成器编写一些花哨的东西,但我不擅长编写它们。

提前致谢!

在一行中执行此操作的奖励积分。如果current = 0太麻烦,那么它也可能是current = -1or current = 7

编辑:确保检查current = 1,这应该是

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

4 回答 4

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

或者

del all[max(current - 2, 0):current]
于 2012-04-10T07:12:09.970 回答
3

这行得通吗?

>>> all = range(1, 7)
>>> new = all[:2]+all[4:]
>>> print new
[1, 2, 5, 6]
于 2012-04-10T07:12:49.357 回答
1
all[:max(current-2,0)] + all[max(current,0):][:-1] + all[-1:]*(0 < current < len(all))
于 2012-04-10T15:23:12.650 回答
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]
于 2012-04-10T07:20:42.297 回答