2010-12-15 4 views
6

したがって、array[:-1]を呼び出すと配列がクローンされることに気付きました。Python loop to [:-1]

私はそれに3000の要素のような大きな配列を持っていると言います。私はそれを反復処理するので、クローン化されたくない!私はちょうど最後の2番目に反復したい。

for item in array[ :-1 ] : 
    # do something with the item 

は、だから私は、カウンタ変数に頼る必要があり

for c in range(0, len(array) - 1) : 
    # do something with array[ c ] 

または/ array[:-1]構文は効率的になるようにする方法はありますか?

+1

が重複する可能性[私はPythonのリストの「ビュー」を作成することはできますか?] (http://stackoverflow.com/questions/3485475/can-i-create-a-view-on-a-python-list) –

+2

悲しいことに、「他の質問」は「itertools」に完全に欠けている。したがって、私はこの質問を閉じることに投票していません。 –

+0

@pstはもう1つの質問に対してより良い回答を投稿することは「正しいこと」ではありませんか? –

答えて

6
for item in itertools.islice(array, len(array) - 1): 
4

やりたいだろうように見えitertools.isliceをチェックアウト:

from itertools import islice 
for item in islice(array, 0, len(array) - 1): 
    # do something with item 

これを約ありますあなたが望むものの半分。 array[i]と言う必要はなくなりますが、len(array) - 1を指定する必要はありません。

3000個のアイテムは最新のコンピュータには何もないので、あなたのプログラムが著しく遅く、このコードが寄与する要素であると判断するためにプロファイリングしない限り、非効率性については心配しません。あなたが/シーケンスの長さを知らないことができない/したくないときのために

2

:の

def allbutlast(seq): 
    it = iter(seq) 
    el = next(it) 
    for e in it: 
    yield el 
    el = e 

for i in allbutlast([1, 2, 3]): 
    print i