2012-04-10 11 views
9

私はこのような単純な、常に連続し-順序付けられたリストがあります:私もcurrent = 4を持ってPythonでリストの範囲(サブセクション)を削除するにはどうすればよいですか?

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

を。最後に、私は、だから何が起こったことは、それはそれ3current数と1を取り外したallリストはこの

altered = [ 1, 2, 5, 6 ] 

に見えるようにしたいです。

currentもあります。10です。この2つの値でエラーが発生しないようにしたいと思います。例外current = 0については

は、変更されたリストはcurrent = 0は、単に最後の番号を削除することを意味し、この

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

のようなものです。

私はおそらく、ジェネレータで何か気になるコードを作成することができると思っていますが、私はそれらを書き留めています。

ありがとうございます!

ボーナスポイントこれを1行で実行します。 current = 0に問題がある場合は、current = -1またはcurrent = 7でもかまいません。

EDIT:この作品はなり

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

それは値4を有しているためか、(一方から数えて)第4の位置にあるので、現在の== 4はリストから削除4である場合?同様に、3が削除されたのは4より小さい最小の数であるか、または削除された項目の前のインデックスにあるためです。 – thebjorn

+0

リストは常に 'range()'なので、位置や値として見ても問題ありません。 – hobbes3

+2

'all()'関数が組み込まれていて、名前を使用するとそのリストへのアクセスを削除するので、 'all'を呼び出さないでください。 – jamylak

答えて

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

または

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

'current = 1'では動作しません – hobbes3

+0

これは今動作しますか? – Doboy

+0

ニース!これは 'current = 7'でも同様です。 'current = 0'の最後の数字を削除するようにすることはできますか?それから完璧です! – hobbes3

1

であるべき、current = 1をチェックするようにしてください?

>>> all = range(1, 7) 
>>> new = all[:2]+all[4:] 
>>> print new 
[1, 2, 5, 6] 
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] 
+0

BTWこれにより、元のリストは変更されません。 – huggie

+1

'current = 0'は** hobbes3 **のように最終値' 6'を取り除かなければなりません – FallenAngel

+0

これはうまくいくはずですが、 'current = 0'ではできません:-(' [item in item all item!= currentおよびitem!= current-1またはcurrent == 0でitem!= len(all)] ' – hobbes3

1
all[:max(current-2,0)] + all[max(current,0):][:-1] + all[-1:]*(0 < current < len(all)) 
関連する問題