24

次のような単純な、常に連続した順序のリストがあります。

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

私も持っていcurrent = 4ます。最後に、allリストを次のようにしたい

altered = [ 1, 2, 5, 6 ]

それで何が起こったのかというと、current番号とその前 3の番号が削除されました。

current1ともできる0ので、これら 2 つの値に対してエラーがスローされないようにしたいと考えています。

例外current = 0の場合、変更されたリストは次のようになります

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

つまりcurrent = 0、最後の数字を削除するだけです。

ジェネレーターを使えば何か凝ったものをコーディングできると思いますが、私はそれを書くのが苦手です。

前もって感謝します!

これを1行で行うためのボーナスポイント。current = 0が難しすぎる場合は、current = -1またはの可能性もあります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 に答える