2009-08-15 9 views
8

ループで.. Pythonのためのオフセットを持つ要素にアクセスすると、私はむしろ私は、Pythonと少し周りいじくるてきた

for x in SomeArray: 

を使用するように(「ニシキヘビ」か)それは通常、より良いだと集まってきましたより多くのC-スタイル

for i in range(0, len(SomeArray)): 

よりも、私はこれでメリット、主にクリーンなコード、そして素敵なmap()と関連する機能を使用する能力を参照ください。しかし、配列のさまざまなオフセットの要素に同時にアクセスしたいという状況に非常によく直面しています。たとえば、現在の要素を要素の2ステップ後ろに追加することができます。明示的な指標に頼ることなくこれを行う方法はありますか?

+1

range(0、len(SomeArray))は、通常の範囲(len(SomeArray))と同等であることに注意してください。 – EOL

答えて

14

Pythonでこれを行う方法は、次のとおり

for i, x in enumerate(SomeArray): 
    print i, x 

enumerate発生器が2タプル、配列インデックスと要素を含むそれぞれのシーケンスを生成します。

+0

しかし、ループの1回の反復で前/後の要素にどのようにアクセスしますか? – int3

+0

ループ内で、SomeArray [i-1]またはSomeArray [i + 1]にアクセスできます。 –

+0

'SomeArray [i-1]'?しかし、あなたは実際に何をしているのかを説明したいかもしれません – SilentGhost

6

リストインデックスとzip()はあなたの友人です。私はその背後の要素に2つのステップを、現在の要素を追加したい場合があります

はここにあなたのより具体的な質問に対する私の答えです。明示的な指標に頼ることなくこれを行う方法はありますか?あなたが数値配列で作業する場合は

arr = range(10) 
[i+j for i,j in zip(arr[:-2], arr[2:])] 

また、モジュールnumpyを使用することができます。例えば、上記のコードがよりエレガントのように書くことができる:(N-2)のn番目の要素を追加する

import numpy 
narr = numpy.arange(10) 
narr[:-2] + narr[2:] 

番目の要素は、(M + 2)にm番目の要素を追加することと同等である要素(用数学的に傾いているので、置換n - > m + 2を行った。 nの範囲は[2、len(arr)]で、mの範囲は[0、len(arr)-2]です。角かっことかっこに注意してください。 2からlen(arr)-1の要素(最初の2つの要素を除外した要素)は、[:-2]のようにインデックス付けされ、0からlen(arr)-3(最後の2つの要素を除外) 2:]。

あなたは既にリスト内包を知っているとします。

+0

私はリスト内包を知っています。しかし、実際にそれらを使用していない。 zip()は素晴らしいソリューションです – int3

関連する問題